技術共有

レベル 1: Linux の基礎知識

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Linuxの基本ディレクトリ

序文

この記事は、上海人工知能研究室が主催する第 3 回学者向け大規模モデル演習キャンプのメモです。個人およびティーチングアシスタントが宿題を添削する際の参考としてのみ使用してください。チュートリアルの元のリンク
登録するには、WeChatで「第3回 学者モデル練習キャンプ」を検索してください。
このメモは、元のチュートリアルに基づいて修正され、個人的に注釈が付けられたメモです。

Linux+InternStudio レベル

😀Hello大家好,欢迎来到学者大型モデル実践キャンプは、初めて実践キャンプに参加する学生や、Linuxの基礎知識のない様々な業界の学生を対象に、実践キャンプが用意した基礎コースの使い方を教えます。InternStudio 開発マシン、そしていくつかの基本をマスターしてくださいLinuxの知識 、次のコースでどこから始めればよいかわからないということがないように、皆さんのお役に立てれば幸いです。ここのレベルタスクにはいくつかのレベルタスクが用意されています。必要なレベルタスクを完了してチェックインすると、現在のレベルのコンピューティングパワー報酬を受け取ります。はじめましょう!

1. InternStudio開発マシンの紹介

InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 🤗 HugginFace 开源生态。

InternStudio について詳しく知りたい場合は、次のドキュメントを確認してください。 インターンスタジオ

https://studio.intern-ai.org.cn/

まず上のリンクを開いて InternStudio にログインすると、次の図に示すように、コンソール インターフェイスに自動的に移動します。

ここに画像の説明を挿入します

各シリアル番号に対応するページの機能を説明します。

  1. ここで作成できます開発機、開発マシンの構成を変更したり、関連ログを表示したりすることもできます。

ここに画像の説明を挿入します

  1. ここでOK視覚化開発マシン内のファイルとフォルダーを表示します。2 つの開発マシンを作成した場合、それらは同じクラウド ディスクを使用します。 (各開発マシンは Docker コンテナであるため、ストレージ クラウド ディスクが 1 つマウントされます。専門用語の説明については、以下を参照してください。 専門用語の解説) ここでは、ファイルまたはフォルダーのアップロード、ファイルの作成、隠しファイルの表示を行うことができます。

ここに画像の説明を挿入します

  1. 開発マシンの新機能です。プロジェクトを実行したい場合、チームのメンバー全員がリソースを申請できます。共有コンピューティング リソース,避免造成资源浪费。(毕竟烧的可都是💴啊)
  2. これは設定に使用されますSSHキー, 使い方については後ほど説明します。
  3. 最後の場所は、個人情報を編集し、あなたの個人情報を確認するための場所です。コンピューティングリソース具体的な使い方。

上記は、InternStudio プラットフォームの簡単な紹介です。ホームページにアクセスして、「」をクリックして開発マシンを作成する方法を見てみましょう。開発マシンを作成する

ここに画像の説明を挿入します

ここでは作成することを選択します個人開発マシン、という名前のテストクーダバージョンは12.2ですが、資源の配分10% を選択すると、デフォルトの期間で問題ありません。

作成が完了したら、開発機インターフェイス上に作成した開発マシンが表示されます。クリックして開発マシンに入ります。

ここに画像の説明を挿入します

開発マシンに入ると、開発マシンのメイン ページが表示され、次の 3 つのモードから選択できます。JupyterLab、ターミナル、VScode

ここに画像の説明を挿入します

で:

  1. ジュピターラボ: ファイルの表示やコードの実行などが簡単にできる内蔵ターミナルを備えたインタラクティブなプログラミングおよび教育環境。
  2. ターミナル(ターミナル、最も軽量): 主にコマンドライン操作、またはスクリプトや単純なプログラムの実行に使用されます。
  3. VSコード: Web ページに統合された VSCode は、ローカル VSCode での SSH 接続を介してリモートで開発することもできます。 以下に、リモート接続の設定方法を説明します。

ここに画像の説明を挿入します

  1. これはリソースの使用状況であり、後続のコースで使用されます。

2. SSHとポートマッピング

上記で紹介したInternStudio プラットフォーム、および開発マシンの作成方法についてこのセクションでは理解したいと思います。パスワードリモート接続を使用する理由, SSHの使い方リモート接続開発機って何ですか?ポートマッピングそしてどのように進めるかポートマッピング

2.1 SSHとは何ですか?

パスワード正式名称はSecure Shellで、中国語に訳すとセキュアシェルとなります。ネットワークセキュリティプロトコル 、暗号化と認証のメカニズムにより、安全なアクセスやファイル転送などのサービスを実現します。 SSH プロトコルは、ネットワーク データを暗号化および認証することにより、安全でないネットワーク環境で安全なネットワーク サービスを提供します。

SSH は (C/S アーキテクチャ) によるものです。サーバそしてクライアント安全な SSH チャネルを確立するには、双方が最初に TCP 接続を確立し、次に使用されるバージョン番号とさまざまなアルゴリズムをネゴシエートして、同じものを生成する必要があります。セッションキー後続の対称暗号化に使用されます。ユーザー認証が完了すると、両者はデータ交換のためのセッションを確立できます。

その後の練習では、SSHキーを構成する、構成キーは、開発マシンにリモートで接続するときにパスワードを繰り返し入力する必要がないようにするためのものです。なぜリモート接続するのでしょうか?

リモート接続の利点は、リモート オフィスを使用している場合、SSH 経由で開発マシンにリモート接続できるため、ローカルで開発できることです。また、ローカル コードを実行する必要があり、環境がない場合は、リモート接続が非常に必要になります。

2.2 SSH を使用して開発マシンにリモート接続するにはどうすればよいですか?

2.2.1 SSHリモート接続にパスワードを使用する

まず、SSH リモート接続のパスワードを入力する方法を使用します。パスワードなしのログインを構成する方法については後で説明します。

開発マシンの作成が完了したら、コンピューターの PowerShell ターミナルを開いて次を使用する必要があります。勝利+Rショートカット キーを使用して実行ボックスを開き、powerShell と入力して、powerShell ターミナルを開きます。 (Linux または Mac オペレーティング システムを実行している場合、次の手順は同じです)

開発マシンのプラットフォームに戻り、次に入ります。開発機ページ上で作成した開発マシンを見つけて、 をクリックします。SSH接続

ここに画像の説明を挿入します

ここに画像の説明を挿入します

それからコピーしますログインコマンド, ここの37367は開発マシンが使用するSSHポートで、一般的にはポート22が使用されます。このポート番号がないとSSHに接続できず、人によってポートが異なるため、開発マシンに接続できない場合があります。 、ポートが間違っているかどうかを確認する必要があります。

コピーしたコマンドを PowerShell に貼り付けて Enter キーを押します。ここでは、ログイン コマンドの下にあるパスワードをコピーしてターミナルに貼り付けます。一部のコンピュータでは、パスワードをコピーした後、右クリックして貼り付けることができます。shift+ins、ここに貼り付けたパスワードは表示されませんが、これは正常です。

最後に Enter キーを押すと、成功を示す次の内容が表示されます。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

開発マシンに接続したら、次を使用できます。hostname開発マシン名を表示するには、次を使用します。uname -a開発マシンのカーネル情報を表示するには、次を使用します。lsb_release -a開発マシンのバージョン情報を表示するには、次を使用します。nvidia-smiGPU 情報を確認します。これらのコマンドについては後で説明します。リモート接続を終了する場合は、コマンドを 2 回入力します。exitそれでおしまい。

2.2.2 SSH リモート接続用の SSH キーの設定

しかし、開発や勉強をする際、毎回リモートでパスワードを入力するのは面倒ですが、sshコマンドでパスワードを入力する手間を省くことができます。sshキー生成キーを生成するコマンド

SSH キーは、SSH プロトコルでの認証と暗号化通信に使用される、安全で便利なログイン認証方法です。

sshキー生成RSA と DSA の両方の認証キーをサポートします。

一般的に使用されるパラメータは次のとおりです。

  • -t: dsa、ecdsa、ed25519、rsa などのキーの種類を指定します。
  • -b: キーの長さを指定します。
  • -C: コメントを追加します。
  • -f: キーを保存するファイル名を指定します。
  • -i: 暗号化されていない ssh-v2 互換の秘密/公開キー ファイルを読み取ります。

ここでは RSA アルゴリズムを使用してキーを生成します。コマンドは次のとおりです。

ssh-keygen -t rsa
  • 1

コマンドを入力した後ずっと入ってください以上です。ここでのキーはデフォルトで生成されます。~/.ssh/ディレクトリの下に、~ホームディレクトリを指します。Windows の場合は、C:Users{your_username} 。PowerShellで使用可能Get-Content生成されたキーを表示するコマンド。Linux オペレーティング システムの場合に使用できます。cat注文。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

次に、開発マシンのプラットフォームに戻り、ホームページの [構成] をクリックします。SSHキーをクリックしてから、SSH公開キーを追加する

ここに画像の説明を挿入します

ここに画像の説明を挿入します

生成したキーをコピーして公開キー ボックスに貼り付けます。最後に、[今すぐ追加] をクリックすると、SSH キーの設定が完了します。

ここに画像の説明を挿入します

SSHキーの作成が完了したら再起動しますターミナルリモート接続する場合は、パスワードの入力手順は省略されます。

2.2.3 SSH リモート接続に VScode を使用する

もちろん、次のような SSH リモート接続ソフトウェアを使用することもできます。Windterm、Xterminal待って。ここではリモート接続に VScode を使用します。VScode を使用する利点は、コードの変更やその他の操作に非常に便利なコード エディターであることです。

VScode でリモート接続する場合は、プラグインのセットもインストールする必要があります。VScode のインストール方法はオンラインで検索できます。 (開発マシンの vscode ではこのプラグインを検索できませんが、ローカルの vscode では検索できます)

ここに画像の説明を挿入します

VScode をインストールしている場合は、左側の拡張機能ページをクリックし、検索ボックスに「SSH」と入力して、インストールするプラグインをクリックします。

ここに画像の説明を挿入します

プラグインのインストール後、サイドバーのリモート接続アイコンをクリックし、SSHの「+」ボタンをクリックして、開発マシンのSSH接続用のログインコマンドを追加します。

ここに画像の説明を挿入します

ログイン コマンドをコピーし、そのコマンドをポップアップ ウィンドウに貼り付けて、最後に Enter キーを押します。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

もちろん、デフォルトの構成ファイルをカスタマイズすることもできます。(これには、すべてのリモート接続情報が含まれます)。

Host ssh.intern-ai.org.cn #主机ip也可以是域名
  HostName ssh.intern-ai.org.cn #主机名
  Port 37367 #主机的SSH端口
  User root #登录SSH使用的用户
  StrictHostKeyChecking no
  UserKnownHostsFile /dev/null
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

次の構成オプションの一部を手動で追加する場合は、上記の形式に従って対応する部分を変更する必要があります。

もし *StrictHostKeyChecking noそしてUserKnownHostsFile* /dev/null指紋認証のために表示されるポップアップ ウィンドウを削除します。

ここに画像の説明を挿入します

StrictHostKeyChecking no厳密なホスト キー チェックが無効になっていることを示します。これは、新しい SSH サーバーに接続するときにサーバーのホスト キーが厳密に検証されないことを意味し、一定のセキュリティ リスクが生じる可能性があります。

UserKnownHostsFile /dev/nullユーザーに既知のホスト キー ファイルを /dev/null に設定します。これにより、既知のホスト キーの記録と使用が基本的に無視されます。

ただし、一般的なセキュリティ慣行では、厳密なホスト キー チェックを恣意的に無効にすることはお勧めできません。

次に、右下隅にポップアップ表示されるプロンプト ウィンドウで [接続] をクリックして、開発マシンにリモート接続します。

ここに画像の説明を挿入します

ここに画像の説明を挿入します

リモート接続が完了したら、開くフォルダー (作業ディレクトリとも呼ばれます) を選択できます。開発マシン内のフォルダーは、前述したものです。クラウドディスク

次回リモート接続するときは、ログインコマンドなどを入力する必要はなく、次のように vscode のリモート接続を開いて最初の接続時の開発マシン情報を確認するだけです。rootこれは、最初に開発マシンに接続するときに、/root作品リスト。

ここに画像の説明を挿入します

そして下の写真では->開発マシンに入った後、作業ディレクトリを再選択する必要があることを示します。

ここに画像の説明を挿入します

そして下の写真では->最後の開発マシンによって選択された作業ディレクトリに入ることを示します。

ここに画像の説明を挿入します

毎回選択される作業ディレクトリは、開発マシン情報の下に表示されます: (ここには、lagent 用の追加の作業ディレクトリがあります)

ここに画像の説明を挿入します

次にご紹介するのは、ポートマッピング

2.3. ポートマッピング

2.3.1 ポートマッピングとは何ですか?

ポートマッピング外部ネットワークの任意のポートを内部ネットワークの対応するポートにマッピングして、内部ネットワークと外部ネットワーク間の通信を実現するネットワーク技術です。ポート マッピングを通じて、イントラネット内のサービスやアプリケーションに外部ネットワークからアクセスし、ネットワーク上で便利な通信を実現できます。

では、開発マシンを使用するときにポート マッピングを実行する必要があるのはなぜでしょうか?

後続のコースではモデルを実施するため、ウェブデモ導入の実践では、このプロセス中に Web UI の読み込みが不完全であるという問題が発生する可能性があります。これは、開発マシンの Web IDE で web_demo を実行するときに、開発マシンの http/https サービスに直接アクセスすると、プロキシの問題が発生する可能性があるためです。UIリソース完全に読み込まれていません。

したがって、この問題を解決するには、web_demo を実行している接続をポート マップする必要があります。外部ネットワークリンクはローカルホストにマッピングされますでは、このプロキシの問題を解決するためにローカル接続アクセスを使用します。今すぐ実践してみましょう。

ここに画像の説明を挿入します

まず、図に基づいて開発マシンのポート マッピングがどのように機能するかを理解しましょう。

以下に実際的な手順を示します。まず、ポート マッピングの実行方法を理解します。

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

上記はポート マッピングのコマンドであり、ホスト上でこのコマンドを実行してポート マッピングのプロセスを理解します。

ここに画像の説明を挿入します

個人用 PC は、開発マシンの唯一の公開ポート 37367 にリモート接続し (これは SSH 中に説明されており、各開発マシンの公開ポートは異なります)、トンネル オプションを設定します。公開されたポートは、トラフィックを転送するための中継ステーションとして機能します。

  • -C: 圧縮を有効にして、転送されるデータ量を削減します。
  • -N: リモート コマンドは実行せず、トンネルを確立するだけです。
  • -g: リモート ホストがローカルに転送されたポートに接続できるようにします。

この SSH コマンドが個人の PC で実行されると、SSH クライアントはローカル マシンのポート 7860 で待機します。

ローカル ポート 7860 に送信されたトラフィックは、SSH トンネルによってリモート サーバーのアドレス 127.0.0.1 のポート 7860 に転送されます。

これは、開発マシンのこのポートが外部ネットワークに直接公開されていない場合でも、このトンネルを通じてリモート サーバー上のサービスに安全にアクセスできることを意味します。 。

2.3.2 ポートマッピングを実行するにはどうすればよいですか?
2.3.2.1 sshコマンドを使用したポートマッピング

引き続き開発マシンのインターフェイスに移動し、開発マシンを見つけて、カスタムサービス、最初のコマンドをコピーし、
ここに画像の説明を挿入します

ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
  • 1

コマンドの各部分の意味を彼に紹介しましょう。

  • -p 37367: 前述した SSH 接続用のポートを 37367 に指定します。
  • [email protected]:使用することを示します root ユーザー ID の接続先ssh.intern-ai.org.cn このホスト。
  • -CNg
    • -C 通常、圧縮を有効にするために使用されます。
    • -N リモートコマンドは実行されず、ポートフォワーディングなどの接続のみが確立されることを示します。
    • -g リモート ホストがローカルに転送されたポートに接続できるようにします。
  • -L {本地机器_PORT}:127.0.0.1:{开发机_PORT}: これは、ローカル マシンの指定されたポートを転送するようにローカル ポート フォワーディングを設定します ( {本地机器_PORT} を表します)リモートホスト(ここでは、つまり)に転送されます。ssh.intern-ai.org.cn)の 127.0.0.1 (つまり、ローカル ループバック アドレス) と指定された開発マシンのポート (によって定義されます){开发机_PORT} 急行)。
  • -o StrictHostKeyChecking=no: 初めて接続するときに不明なホスト キーによるプロンプトやエラーを回避するには、厳密なホスト キー チェックをオフにします。

Web デモを実行するときは、次のコマンドを使用してポート マッピングを実行できます。

hello_world.py ファイルを作成し (開発マシンのインターフェイスを右クリックしてファイルを作成し、名前を hello_world.py に変更します)、ファイルに次の内容を入力します。

import socket
import re
import gradio as gr
 
# 获取主机名
def get_hostname():
    hostname = socket.gethostname()
    match = re.search(r'-(d+)$', hostname)
    name = match.group(1)
    
    return name
 
# 创建 Gradio 界面
with gr.Blocks(gr.themes.Soft()) as demo:
    html_code = f"""
            <p align="center">
            <a href="https://intern-ai.org.cn/home">
                <img src="https://intern-ai.org.cn/assets/headerLogo-4ea34f23.svg" alt="Logo" width="20%" style="border-radius: 5px;">
            </a>
            </p>
            <h1 style="text-align: center;">☁️ Welcome {get_hostname()} user, welcome to the ShuSheng LLM Practical Camp Course!</h1>
            <h2 style="text-align: center;">😀 Let’s go on a journey through ShuSheng Island together.</h2>
            <p align="center">
                <a href="https://github.com/InternLM/Tutorial/blob/camp3">
                    <img src="https://oss.lingkongstudy.com.cn/blog/202406301604074.jpg" alt="Logo" width="20%" style="border-radius: 5px;">
                </a>
            </p>

            """
    gr.Markdown(html_code)

demo.launch()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

編集後に思い出すctrl+s保存

コードを実行する前に、次を使用する必要がありますpip install gradio==4.29.0次の依存関係パッケージをインストールするコマンド (コマンドをコピーしてターミナルに貼り付け)、Web IDE のターミナルで実行します。python hello_world.py注文

ここに画像の説明を挿入します

ポートマッピングが行われていない場合、ローカルIPを使用してアクセスすることはできません。

ここに画像の説明を挿入します

次のコマンドを使用して、これを PowerShell に入力できます。

ssh -p 37367 [email protected] -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
  • 1

ここに画像の説明を挿入します

これは成功を表します。 (知らせ: このコマンドはコンテンツを返しません。これは、ポート マッピングが実行中であることを意味します。その後、Web ページで接続を開くと Web UI インターフェイスが表示されます)

ここに画像の説明を挿入します

2.3.2.2 ポートマッピングに vscode を使用する

もちろん、異なるWeb UIを実行する場合は、コマンドを繰り返し入力する必要があり、非常に面倒なので、VScodeを使用する必要があります。開発マシンを SSH 経由でリモートに接続しました。VScode は自動ポート マッピングを提供します。「Ctrl+Shift+~」ショートカット キーを使用できます。端末を起動します、ポート オプションはターミナルの右側にあります。

ここに画像の説明を挿入します

ここでポート マッピング情報を表示でき、ポートを変更する必要がある場合は、ポート列のポート番号を変更できます。

3. 基本的な Linux コマンド

このパートでは、Linux のいくつかの側面を理解していただきます。基本操作 、いくつかのツールを使用します。問題が発生したときに誰もが自分で解決できるように、何か問題が発生した場合は、ここにコメントしてください。すぐに回答します。

私たちが使っているので開発機ほとんど使われません権限管理 , なので紹介しません。 (以下の操作は全てVScodeターミナル上で行います)

3.1 ファイル管理

Linux では、一般的なファイル管理操作には次のようなものがあります。

  • ファイルを作成する:使える touch コマンドは空のファイルを作成します。
  • ディレクトリを作成する:使用 mkdir 注文。
  • ディレクトリ切り替え:使用cd注文。
  • ディレクトリを表示:使用pwd注文。
  • ファイルの内容を表示する: 使用する場合 cat ファイルの内容全体を直接表示します。more そしてless ページ単位で閲覧できます。
  • ファイルを編集する:のように vi またはvim 編集者を待ちます。
  • ファイルをコピーする:使用 cp 注文。
  • ファイルリンクの作成:使用ln注文。
  • ファイルの移動:合格 mv 注文。
  • ファイルの削除:使用 rm 注文。
  • ディレクトリを削除するrmdir(空のディレクトリのみ削除可能) または rm -r(空でないディレクトリは削除できます)。
  • ファイルの検索:使える find 注文。
  • ファイルまたはディレクトリの詳細を表示する:使用lsコマンドの使用など ls -lディレクトリ内のファイルに関する詳細情報を表示します。
  • プロセスファイル: 複雑なファイル操作の場合は、次を使用できます。sed注文。

このコースで使用するいくつかのコマンドを次に示します。

3.1.1 触る

タッチを使用してファイルをすばやく作成できるため、ファイルを作成するために手動でクリックする必要はありません。たとえば、demo.py書類:

3.1.2 mkdir

同様に、次の名前のファイルを作成する場合は、testディレクトリ:

ここに画像の説明を挿入します

3.1.3 CD

このコマンドは最も一般的に使用されるコマンドです。使用する前に、コンピューターのスキルを持たない生徒にディレクトリ構造を説明し、全員が理解できるように図を描く必要があります。

ここに画像の説明を挿入します

私たちが今使っているのは、rootディレクトリ。これは root ユーザーのホーム ディレクトリでもあります。~、Linuxオペレーティングシステムの場合/ルート ディレクトリを表します。ルート ディレクトリには、システムに必要な多くのディレクトリとファイルが存在します。rootディレクトリ、その中には.現在のディレクトリを表します。..表される親ディレクトリ。今入ったらtestディレクトリに戻って、rootディレクトリでは、次のようにすることができます。

3.1.4 パスワード

私たちは使うことができますpwd現在のディレクトリを表示するコマンド: これにより、現在どのディレクトリにいるかを簡単に判断できるようになります。

ここに画像の説明を挿入します

3.1.5

catこのコマンドはファイルの内容を表示でき、さらに多くのコマンドを使用できます。--help表示するコマンド:

  • -a、--show-all は -vET と同等です
  • -b、-number-non-blank 空ではない出力行の数、-n をオーバーライドします。
  • -e、-vE と同等
  • -E、--show -end は各行の末尾に $ を表示します
  • -n、--number すべての出力行の番号
  • -s, --crick-blank は空の出力行の繰り返しを抑制します
  • -t は -vT と同等です
  • -t、--show-tabs はタブ文字を ^I として表示します
  • -v、--show 非表示では、LFD と TAB を除き、^ と M 表記を使用します。
3.1.6 vi または vim

ファイルを編集する必要があるときに使用できますviまたはvimコマンドでファイル編集を開始すると、次の 3 つのモードがあります。

ここに画像の説明を挿入します

使用する編集モードに入るi, vim の便利な点は、ターミナル上で簡単なファイル変更ができることです。

3.1.7 cp と ln (強調)

**cp**このコマンドは、次のコースで頻繁に使用されます。一般的な用途は次のとおりです。

  • ファイルをコピーします:cp 源文件 目标文件
  • ディレクトリをコピーします:cp -r 源目录 目标目录

ただし、モデルを使用したい場合、この操作は多くのディスク容量を消費するため、通常は次のコマンドを使用します。lnコマンド、これは Windows のショートカットと同じです。 Linux には 2 種類のリンクがあります。 ハードリンク(ハードリンク)付きソフトリンク (シンボリック リンク)、ハード リンクはファイルに複数の名前を付けることができることを意味しますが、ソフト リンクは、コンテンツが別のファイルの場所を指す特別なファイルを生成します。ハード リンクは同じファイル システム内に存在しますが、ソフト リンクは異なるファイル システムにまたがることができます。

したがって、一般的にはソフト接続を使用します。一般的な使用方法は次のとおりです。

ln [参数][源文件或目录][目标文件或目录]
  • 1

パラメータは次のとおりです。

  • -s: ソフト リンク (シンボリック リンク) の作成も最も一般的に使用されます。
  • -f: 強制的に実行し、既存のターゲット ファイルを上書きします。
  • -i: 対話モード。ファイルが存在する場合、ユーザーはそれを上書きするかどうかを尋ねられます。
  • -n: シンボリック リンクを一般ディレクトリとして扱います。
  • -v: 詳細な処理を表示します。
3.1.8 MVとRM

mvコマンドとrmコマンドは同様の方法で使用されますが、mvファイルやディレクトリの移動に使用され、名前を変更することもできます。rmこのコマンドは、ファイルまたはディレクトリを削除するために使用されます。

一般的に使用される方法は次のとおりです。

  • mvコマンド

一般的に使用されるパラメータ:

  • -i: インタラクティブモード、上書きする前に質問します。
  • -f: 強制カバレッジ。
  • -u: ソース ファイルがターゲット ファイルよりも新しい場合にのみ移動します。

使用例:

  • mv file1.txt dir1/: ファイルを移動します file1.txt ディレクトリに移動dir1 真ん中。

  • mv file1.txt file2.txt: ファイルを移動します file1.txt に名前を変更file2.txt

  • rmコマンド

一般的に使用されるパラメータ:

  • -i: インタラクティブモード、削除する前に質問します。
  • -f: 存在しないファイルを無視し、確認を求めるメッセージを表示せずに強制的に削除します。
  • -r: ディレクトリとその内容を再帰的に削除します。

使用例:

  • rm file.txt:ファイルの削除 file.txt
  • rm -r dir1/: ディレクトリを再帰的に削除します dir1 およびそのすべての内容。

ディレクトリを削除するコマンドも使用できますrmdir

3.1.9 探す

findこのコマンドは、Linux システムの強力なファイル検索ツールであり、指定されたディレクトリおよびそのサブディレクトリ内で条件を満たすファイルまたはディレクトリを検索し、対応する操作を実行します。

以下はfindコマンドの一般的な使用例は次のとおりです。

  1. ファイル名で検索:使用-nameファイル名でファイルを検索するオプション。例えば、find /path/to/directory -name "file.txt"指定されたディレクトリとそのサブディレクトリを検索します。file.txt書類。
  2. ファイルの種類で探す:使用-typeファイルタイプ別にファイルを検索するオプション。例えば、find /path/to/directory -type f指定したディレクトリとそのサブディレクトリ内のすべての通常のファイルが検索されます。
  3. ファイルサイズで探す:使用-sizeファイル サイズでファイルを検索するオプション。例えば、find /path/to/directory -size +100M指定したディレクトリとそのサブディレクトリで 100MB を超えるファイルを検索します。
  4. 更新時刻で検索:使用-mtime-atimeまたは-ctimeオプションは、変更時間、アクセス時間、またはステータス変更時間に基づいてファイルを検索します。例えば、find /path/to/directory -mtime -7指定されたディレクトリとそのサブディレクトリ内で 7 日以内に変更されたファイルを検索します。
  5. ファイル権限による検索:使用-permファイル権限に基づいてファイルを検索するオプション。例えば、find /path/to/directory -perm 755指定されたディレクトリとそのサブディレクトリでアクセス許可 755 のファイルが検索されます。
  6. ユーザーまたはグループから探す:使用-userまたは-groupオプションは、所有者またはグループ別にファイルを検索します。例えば、find /path/to/directory -user usernameユーザーに属する指定されたディレクトリとそのサブディレクトリを検索しますusername書類。
  7. 操作を実行する:使用-execオプションは、見つかったファイルに対して対応する操作を実行できます。例えば、find /path/to/directory -name "*.txt" -exec rm {} ;で終わる見つかったすべてを削除します.txt最後にファイルを付けます。
3.1.10 ls

lsこのコマンドは、ディレクトリの内容を一覧表示するだけでなく、詳細

よく使用されるパラメータと使用方法は次のとおりです。

  • -a: 隠しファイルを含むすべてのファイルとディレクトリを表示します。..) で始まるファイルまたはディレクトリ。
  • -l: ファイルの権限、所有者、サイズ、変更時刻などの詳細情報を長い形式で表示します。
  • -h:そして-l人間が判読できる方法でファイル サイズを表示するために組み合わせて使用​​されます (例:KMG待って)。
  • -R: サブディレクトリの内容を再帰的に一覧表示します。
  • -t :ファイル更新時刻順に表示します。 、

ここに画像の説明を挿入します

3.1.11 sed

sedコマンドは主にテキスト処理に使用されるストリームエディタであり、複雑なファイル操作を処理する場合によく使用されます。sedよく使用されるパラメータとコマンドの使用例は以下のとおりです。

  • パラメータの説明:
    • -e<script> または--expression=<script>: テキスト処理用のスクリプトをコマンドラインで直接指定します。
    • -f<script文件> または--file=<script文件>:指定したスクリプトファイルからスクリプトを読み込み、テキスト処理を行います。
    • -n または--quiet または--silent: スクリプトによって処理された出力結果のみを印刷し、一致しない行は印刷しません。
  • アクションの説明:
    • a: 指定した文字列を現在の行の次の行に追加します。
    • c: 指定した範囲の行を指定した文字列に置き換えます。
    • d: 指定した行を削除します。
    • i: 指定した文字列を現在の行の前の行に追加します。
    • p :選択した行を印刷します。通常は一緒に-n パラメータと一緒に使用すると、一致する行のみが印刷されます。
    • s : テキストの置換には正規表現を使用します。例えば、s/old/new/g すべての「InternLM」を「InternLM yyds」に置き換えます。
  • 例:

ここに画像の説明を挿入します

例で使用されているechoコマンド、これはPythonの場合と同じですprint同じ、コンテンツの印刷に使用されます。ここではパイプ文字を使用します>InternLM をファイルに出力する 一般的に使用されるパイプ文字には次のものがあります。<そして|たとえば、次のように使用できます。grepPythonでインストールされているインクルードを表示するコマンドosフィールドパッケージ:

ここに画像の説明を挿入します

grep強力なテキスト検索ツールです。一般的に使用されるパラメータは次のとおりです。

  • -i:大文字と小文字を区別せずに検索します。
  • -v: 一致を反転します。つまり、一致しない行を表示します。
  • -n:行番号を表示します。
  • -c: 一致する行の数をカウントします。

3.2 プロセス管理

プロセス管理コマンドはシステム監視とプロセス管理のための重要なツールであり、一般的に使用されるプロセス管理コマンドには次のようなものがあります。

  • 追伸: 実行中のプロセスを表示します
  • :実行中のプロセスの動的な表示
  • pstree: 実行中のプロセスをツリービューで表示します
  • グレップ: プロセスを見つけるために使用されます
  • ニース:プロセスの優先度を変更します
  • 仕事:プロセス関連情報の表示
  • 背景と背景: プロセスをバックグラウンドに移動します
  • 殺す: プロセスを強制終了します

開発マシンには特別なコマンドもありますnvidia-smiは、NVIDIA システム管理インターフェイスのコマンド ライン ツールで、NVIDIA GPU デバイスの監視と管理に使用されます。 GPU のステータス、使用状況、温度、メモリ使用量、電力使用量、GPU 上で実行されているプロセスなどの情報を簡単に表示する方法を提供します。

各コマンドの使用例を次に示します。

  • ps : 現在のシステム内のプロセスをリストします。次のようなさまざまなオプションを使用して、さまざまなプロセス情報を表示できます。
    • ps aux  # 显示系统所有进程的详细信息
      
      • 1
  • top : システム内のプロセスのステータスを動的に表示します。プロセス リストをリアルタイムで更新し、CPU とメモリの使用率が最も高いプロセスを表示します。
    • top  # 启动top命令,动态显示进程信息
      
      • 1
  • pstree:現在実行中のプロセスとその親子関係を樹形図で表示します。
    • pstree  # 显示进程树
      
      • 1
  • pgrep : 条件に一致するプロセスを検索します。プロセス名やユーザーなどの条件でプロセスを検索できます。
    • pgrep -u username  # 查找特定用户的所有进程
      
      • 1
  • nice: プロセスの優先度を変更します。nice 値が小さいほど、プロセスの優先度が高くなります。
    • nice -n 10 long-running-command  # 以较低优先级运行一个长时间运行的命令
      
      • 1
  • jobs: バックグラウンドで実行されているプロセスを含む、現在のターミナル セッション内のジョブのリストを表示します。
    • jobs  # 列出当前会话的后台作业
      
      • 1
  • bg そしてfgbg 中断されたプロセスをバックグラウンドで実行させ、fg バックグラウンドプロセスをフォアグラウンドに戻します。
    • bg  # 将最近一个挂起的作业放到后台运行
      fg  # 将后台作业调到前台运行
      
      • 1
      • 2
  • kill: 指定されたプロセスにシグナルを送信します。通常はプロセスを強制終了するために使用されます。
    • kill PID  # 杀死指定的进程ID
      
      • 1
    • 知らせ、kill コマンドはデフォルトで送信されますSIGTERM プロセスが応答しない場合に使用できるシグナル-9使用SIGKILL Signal はプロセスを強制的に強制終了します。

    • kill -9 PID  # 强制杀死进程    
      
      • 1

SIGTERM (シグナル終了) シグナルは、Unix および Unix 系オペレーティング システムでプロセスの終了を要求するために使用される標準シグナルです。この信号は通常、システムまたはユーザーがプロセスを正常にシャットダウンしたいときに送信されます。そしてSIGKILL信号も違うし、SIGTERMプロセスによってシグナルをキャッチして処理できるため、プロセスは終了する前にクリーンアップできます。 (インターネットから)

以下は nvidia-smi コマンドの基本的な使用法をいくつか示します。

  • GPU ステータスに関する概要情報を表示します。
    • nvidia-smi
      
      • 1
  • 詳細な GPU ステータス情報を表示します。
    • nvidia-smi -l 1
      
      • 1
    • このコマンドはステータス情報を 1 秒ごとに更新します。

  • GPU 使用履歴を表示します。
    • nvidia-smi -h
      
      • 1
  • すべての GPU をリストし、その PID とプロセス名を表示します。
    • nvidia-smi pmon
      
      • 1
  • 指定された GPU プロセスを強制的に終了します。
    • nvidia-smi --id=0 --ex_pid=12345
      
      • 1
    • これにより、GPU ID 0 上の PID 12345 のプロセスが強制終了されます。

  • GPU パフォーマンス モードを設定します。
    • nvidia-smi -pm 1
      nvidia-smi -i 0 -pm 1
      
      • 1
      • 2
    • 最初のコマンドはすべての GPU をパフォーマンス モードに設定し、2 番目のコマンドは ID 0 の GPU のみをターゲットにします。

  • GPU を再起動します。
    • nvidia-smi --id=0 -r
      
      • 1
    • これにより、GPU が ID 0 で再起動されます。

  • ヘルプ情報を表示します:
    • nvidia-smi -h
      
      • 1

以下に、画像による GPU 情報の紹介を示します。

ここに画像の説明を挿入します

3.3 ツールの使用法

ここにツールがありますTMUXTMUX 端末マルチプレクサです。これにより、複数の端末間の切り替え、端末の接続解除 (端末は強制終了されず、バックグラウンドで実行し続けます)、および他の端末への再接続が簡単になります。このツールを導入する理由後でやるからXtunerモデルを微調整すると、時間がかかります。Tmuxプログラムが強制終了されて中断される状況を解決できます。インストール方法と使用方法は次のとおりです。

開発マシンは ubuntu オペレーティング システムを使用しているため、次を使用できます。lsb_release -a ubuntu システム情報を表示するコマンド:

ここに画像の説明を挿入します

そして使用しますapt install tmuxtmux をインストールするコマンド。インストールが完了すると使用できるようになります。tmuxtmux を終了したい場合は、コマンドで tmux を使用できます。Ctrl+D"ショートカットキー。

開発マシンでは、/root パスにあるファイルのみが永続的に保存され、他のパスにインストールされたソフトウェアは再起動後にリセットされます。

具体的な使用方法は以下でご覧いただけます。

https://www.ruanyifeng.com/blog/2019/10/tmux.html

4. Conda と Shell の紹介 (追加)

Conda は、Windows、macOS、Linux 上で動作するオープンソースのパッケージ管理および環境管理システムです。ソフトウェア パッケージとその依存関係を迅速にインストール、実行、更新します。 Conda を使用すると、ローカル マシン上でさまざまな環境を簡単に作成、保存、読み込み、切り替えることができます。

開発マシンにはすでにインストールされていますconda直接使用することもできますが、開発マシンに組み込まれたものもありますconda注文studio-conda、以下で紹介していきますcondaと の基本的な使い方studio-conda使い方と導入方法studio-condaそれはどのように達成されるのか。

次のパートで紹介します。

  1. conda設定
  2. conda環境管理
  3. コンダとピップ
  4. Studio-condaはShell(拡張機能)で使用されます

4.1 condaの設定

私たちは使うことができますconda --version現在の開発マシンを表示するにはcondaバージョン情報:

ここに画像の説明を挿入します

使いたいときcondaパッケージのインストールが非常に遅くなります。インストール速度を向上させるために国内ミラーリングを設定できます。

#设置清华镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

しかし、私たちが普段使っているのは、pipパッケージのインストールは後ほど紹介しますpipそしてconda違い。

conda の構成情報を表示したい場合は、次を使用できます。conda config --showコマンドを実行すると、それが開発マシンのデフォルト設定の場合、次が返されます: (情報の一部)

ここに画像の説明を挿入します

これらの構成は次のとおりです。Conda環境設定は、ソフトウェア パッケージのインストール、アップデート、環境管理、その他の操作の方法と結果に影響します。

4.2 conda環境管理

この部分はconda中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。

4.2.1 仮想環境の作成

私たちは使うことができますconda create -n name python``=3.10仮想環境を作成します。これは、Python バージョン 3.10 と名前の仮想環境が作成されることを意味します。作成後にできることは、.condaディレクトリの下にあるenvsディレクトリ内に見つかりました。

ここに画像の説明を挿入します

Python のバージョンを指定しない場合は、最新の Python バージョンに基づいた仮想環境が自動的に作成されます。同時に、仮想環境の作成中に必要なパッケージをインストールできます。conda create -n name numpy matplotlib python=3.10(ただし、このような使い方はお勧めしません)

仮想環境を作成するための共通パラメータは次のとおりです。

  • -n または --name: 作成する環境の名前を指定します。
  • -c または --channel: 追加のパッケージ チャネルを指定します。
  • –clone: 既存の環境のクローンを作成して、新しい環境を作成します。
  • -p または --prefix: 環境のインストール パス (デフォルト以外の場所) を指定します。
4.2.2 どのような仮想環境があるかを確認する

どの仮想環境があるかを確認したい場合は、次のコマンドを使用できます。

conda env list
conda info -e
conda info --envs
  • 1
  • 2
  • 3

ここに画像の説明を挿入します

同時に、環境が配置されているディレクトリも確認できます。

4.2.3 仮想環境のアクティブ化と終了

仮想環境を作成したら、使用できるようになりますconda activate nameコマンドを使用して仮想環境をアクティブ化しますが、切り替えが成功したかどうかを確認するにはどうすればよいですか?簡単です、見てください(base)作成した仮想環境の名前になるかどうか。

ここに画像の説明を挿入します

仮想環境を終了したい場合は、以下を使用できます。

conda activate
conda deactivate
  • 1
  • 2

両方のコマンドが返されますbase環境だからbaseconda の基本的な環境をよく観察してみると、base環境ディレクトリは、他の仮想環境ディレクトリよりも上位にあります。

4.2.4 仮想環境の削除とエクスポート

仮想環境を削除したい場合は、次を使用できます。conda remove --name name --all、仮想環境で 1 つまたはいくつかのパッケージのみを削除する場合は、次を使用できます。conda remove --name name package_name

一部のソフトウェア パッケージの依存関係は非常に複雑であり、構成された環境をエクスポートすると、次回復元できるため、仮想環境のエクスポートは非​​常に必要です。また、設定を他の人と共有することもできます。

#获得环境中的所有配置
conda env export --name myenv > myenv.yml
#重新还原环境
conda env create -f  myenv.yml
  • 1
  • 2
  • 3
  • 4

たとえば、xtuner0.1.17仮想環境がエクスポートされ、構成情報は次のようになります。

ここに画像の説明を挿入します

これらには以下が含まれます環境名仮想環境パッケージのオンライン リポジトリの場所そして仮想環境の依存関係 。後で、高度な使用方法を使用して、仮想環境を迅速に復元します。

4.3 conda と pip

このパートではいくつか紹介しますcondaそしてpipいくつかの違い:

  1. conda は Python 以外のパッケージを管理できますが、pip は Python パッケージのみを管理できます。
  2. conda を使用して仮想環境を作成できますが、pip は仮想環境の作成に使用できず、virtualenv などのパッケージに依存する必要があります。
  3. condaでインストールしたパッケージがコンパイルされるバイナリーファイル、依存パッケージはパッケージ ファイルのインストール中に自動的にインストールされます。pip によってインストールされるパッケージは次のとおりです。ホイールまたはソースコード、Python 言語以外の依存関係は、インストール プロセス中にサポートされません。
  4. conda によってインストールされるパッケージは、現在の仮想環境に対応するディレクトリにダウンロードされ、一度ダウンロードして複数回インストールできます。 pip は対応する環境に直接ダウンロードされます。

車輪 Pythonのインストールパッケージの形式です。

これは、conda のコンパイル済みバイナリに似た、プリコンパイルされたバイナリ配布形式です。

Wheel 形式の主な利点は次のとおりです。

  1. 高速インストール: 事前にコンパイルされているため、インストール中にソース コードのインストールなどのコンパイル プロセスを実行する必要がなく、時間を節約できます。
  2. 一貫性: インストール結果がさまざまなシステムや環境にわたって一貫していることを保証します。

たとえば、大規模な Python ライブラリをインストールする場合、Wheel 形式を使用すると、マシンごとのコンパイル環境の違いによって引き起こされるインストールの問題を回避できます。さらに、コンパイル環境がないシステムやコンパイル機能が弱いシステムの場合、Wheel 形式を使用するとインストール プロセスがよりスムーズになります。

4.4 Studio-condaの使用法とシェル(拡張機能)

この部分は非常に興味深く、非常に実践的だと思うので拡張部分です。興味があれば学習してください。

まずは紹介しましょうstudio-condaこれは開発マシンの組み込みコマンドであり、シェル スクリプトを通じて実装されます。シェルスクリプトとは何ですか?

シェルスクリプト Unix/Linux または同様のオペレーティング システム環境でタスクを自動化するために、特定の順序で配置された一連のコマンドを含むテキスト ファイル。

シェル スクリプトは通常、シェル言語で記述されます。Bash や Sh などの一般的なシェル言語は、先ほど紹介したシェル言語に属する基本的な Linux コマンドです。

次の重要な機能があります。

  1. オートメーション : 一連の反復的で複雑な操作をスクリプトとして記述し、そのスクリプトを実行するだけでこれらの操作を自動化し、時間を節約し、エラーを減らすことができます。たとえば、重要なファイルを毎日定期的にバックアップするスクリプトなどです。
  2. システムマネジメント : システム構成、ユーザー権限、プロセス制御などを管理するために使用されます。たとえば、新しいユーザーを作成し、その権限を設定するスクリプトです。
  3. バッチ処理 : 複数のファイルまたはデータを同時に処理する機能。たとえば、画像ファイルのバッチをある形式から別の形式に変換するスクリプトなどです。
  4. プロセス制御: 条件判定 (if-else)、ループ (for、while) などのように、状況に応じてスクリプトで異なる操作を実行できます。

それstudio-condaこれは自動化の一部であり、開発マシンの root ユーザーの bash 環境の構成ファイルは次のとおりです。.bashrcですが、実際にはメインの設定ファイルは/share/.aide/config/bashrcこのファイルには、次のような一部の操作をより迅速に実行できるようにするコマンドがいくつか書かれています。

export no_proxy='localhost,127.0.0.1,0.0.0.0,172.18.47.140'
export PATH=/root/.local/bin:$PATH
export HF_ENDPOINT='https://hf-mirror.com'
alias studio-conda="/share/install_conda_env.sh"
alias studio-smi="/share/studio-smi"
  • 1
  • 2
  • 3
  • 4
  • 5

export環境変数を設定するために使用されます。aliassh ファイルを変数にコピーすることです。これはターミナルでコマンドとして実行できます。studio-condaそれでおしまい。

ここstudio-smi開くときに仮想メモリの使用量を確認するために使用されます。/share/studio-smiファイルは次のように表示されます。

#!/bin/bash

if command -v vgpu-smi &> /dev/null
then
    echo "Running studio-smi by vgpu-smi"
    vgpu-smi
else
    echo "Running studio-smi by nvidia-smi"
    nvidia-smi
fi
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

このスクリプトは、 vgpu-smi コマンドが存在する場合、それが実行されますvgpu-smi 仮想 GPU (vGPU) のステータス情報を表示するには、存在しない場合は実行されます。nvidia-smi NVIDIA GPU ステータス情報を表示します。以下に示すように:

ここに画像の説明を挿入します

nvidia-smi 物理 NVIDIA GPU デバイスを監視および管理するためのツールです。vgpu-smi NVIDIA vGPU テクノロジーを通じて仮想化された GPU リソースを監視および管理するように設計されています。

私たちは見る/share/install_conda_env.shファイルの内容は次のとおりです。

#!/bin/bash
# clone internlm-base conda env to user's conda env
# created by xj on 01.07.2024
# modifed by xj on 01.19.2024 to fix bug of conda env clone
# modified by ljy on 01.26.2024 to extend

XTUNER_UPDATE_DATE=`cat /share/repos/UPDATE | grep xtuner |awk -F= '{print $2}'`
HOME_DIR=/root
CONDA_HOME=$HOME_DIR/.conda
SHARE_CONDA_HOME=/share/conda_envs
SHARE_HOME=/share

list() {
    cat <<-EOF
  预设环境          描述

  internlm-base    pytorch:2.0.1, pytorch-cuda:11.7
  xtuner           Xtuner(源码安装: main $(echo -e "033[4mhttps://github.com/InternLM/xtuner/tree/main033[0m"), 更新日期:$XTUNER_UPDATE_DATE)
  pytorch-2.1.2    pytorch:2.1.2, pytorch-cuda:11.8
EOF
}

help() {
    cat <<-EOF
  说明: 用于快速clone预设的conda环境

  使用: 
  
    1. studio-conda env -l/list 打印预设的conda环境列表
  
    2. studio-conda <target-conda-name> 快速clone: 默认拷贝internlm-base conda环境
    
    3. studio-conda -t <target-conda-name> -o <origin-conda-name> 将预设的conda环境拷贝到指定的conda环境
        
EOF
}

clone() {
    source=$1
    target=$2

    if [[ -z "$source" || -z "$target" ]]; then
        echo -e "033[31m 输入不符合规范 033[0m"
        help
        exit 1
    fi

    if [ ! -d "${SHARE_CONDA_HOME}/$source" ]; then
        echo -e "033[34m 指定的预设环境: $source不存在033[0m"
        list
        exit 1
    fi

    if [ -d "${CONDA_HOME}/envs/$target" ]; then
        echo -e "033[34m 指定conda环境的目录: ${CONDA_HOME}/envs/$target已存在, 将清空原目录安装 033[0m"
        wait_echo&
        wait_pid=$!
        rm -rf "${CONDA_HOME}/envs/$target"
        kill $wait_pid
    fi

    echo -e "033[34m [1/2] 开始安装conda环境: <$target>. 033[0m"
    sleep 3
    tar --skip-old-files -xzvf /share/pkgs.tar.gz -C ${CONDA_HOME}
    wait_echo&
    wait_pid=$!
    conda create -n $target --clone ${SHARE_CONDA_HOME}/${source}
    if [ $? -ne 0 ]; then
        echo -e "033[31m 初始化conda环境: ${target}失败 033[0m"
        exit 10
    fi

    kill $wait_pid

    # for xtuner, re-install dependencies
    case "$source" in
    xtuner)
        source_install_xtuner $target
        ;;
    esac

    echo -e "033[34m [2/2] 同步当前conda环境至jupyterlab kernel 033[0m"
    lab add $target
    source $CONDA_HOME/bin/activate $target
    cd $HOME_DIR

    echo -e "033[32m conda环境: $target安装成功! 033[0m"

    echo """
    ============================================
                    ALL DONE!
    ============================================
    """
}

······
dispatch $@
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97

それらの中の一つ*list*()待って、それだけですstudio-conda特定の操作を実装できる関数。たとえば、次のように使用できます。studio-conda env listデフォルト環境を表示するには:

ここに画像の説明を挿入します

で*clone*()この関数の主な機能は環境をコピーすることですが、実際にはデフォルトの環境からのみコピーできます。

tar --skip-old-files -xzvf /share/pkgs.tar.gz -C ${CONDA_HOME}

conda create -n $target --clone ${SHARE_CONDA_HOME}/${source}
  • 1
  • 2
  • 3

プリセット環境の圧縮パッケージを解凍し、クローンによって仮想環境を作成します。ただし、シェル スクリプトにもいくつかのロジックが設定されていますが、これはプログラミング言語に精通していればできるはずです。理解できなくても、それは大きな問題ではありません。

では、独自に作成した環境を追加するにはどうすればよいですか?studio-conda真ん中はどうですか?

最初のステップは、/share/conda_envs に新しい conda 環境を作成することです。

conda 作成 -p /share/conda_envs/xxx python=3.1x

2 番目のステップは、ローカル マシンの /root/.conda/pkgs にあるファイルを /share/pkgs にコピーし、再圧縮して置換することです (このステップは、conda の作成プロセス中に大きなパブリック パッケージを保存して、繰り返しのダウンロードを避けることです)。

cp -r -n /root/.conda/pkgs/* /share/pkgs/

cd /share && tar -zcvf pkgs.tar.gz pkgs

3 番目のステップは、install_conda_env.sh の list 関数を更新し、新しい conda 環境の説明を追加することです。

上記は、開発マシンがデフォルトで提供するメソッドです。実際には、以前に使用した別のメソッドがあります。conda輸出済みxtuner0.1.17仮想環境用の構成ファイルを使用できますconda env create -f xtuner0.1.17.yml仮想環境を復元するコマンド。この操作を実装するための簡単なシェル スクリプトを作成しましょう。test.shファイルに次の内容を記述します。

#!/bin/bash

# 定义导出环境的函数
export_env() {
    local env_name=$1
    echo "正在导出环境: $env_name"
    # 导出环境到当前目录下的env_name.yml文件
    conda env export -n "$env_name" > "$env_name.yml"
    echo "环境导出完成。"
}

# 定义还原环境的函数
restore_env() {
    local env_name=$1
    echo "正在还原环境: $env_name"
    # 从当前目录下的env_name.yml文件还原环境
    conda env create -n "$env_name" -f "$env_name.yml"
    echo "环境还原完成。"
}

# 检查是否有足够的参数
if [ $# -ne 2 ]; then
    echo "使用方法: $0 <操作> <环境名>"
    echo "操作可以是 'export' 或 'restore'"
    exit 1
fi

# 根据参数执行操作
case "$1" in
    export)
        export_env "$2"
        ;;
    restore)
        restore_env "$2"
        ;;
    *)
        echo "未知操作: $1"
        exit 1
        ;;
esac
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

シェル スクリプトの作成が完了したら、スクリプトにアクセス許可を付与する必要があります。次のコマンドを使用できます。chmod +x test.sh 、次に入力します./test.sh restore xtuner0.1.17Enter キーを押して仮想環境を復元します。

ここに画像の説明を挿入します

ただし、この操作は開発マシンでの操作とあまり変わりません。studio-condaコマンドを組み合わせると非常に便利ですが、環境をコピーする方法が異なります。したがって、それを実装したい場合は、次のことを行う必要があります。/share/install_conda_env.shファイルのロジックが変更されます。

さて、このレベルの内容はこれですべてです。Linux の使い方はわかりませんが、上記の内容が今後皆さんに役立つことを願っています。 , 大きなモデルは学習にあまり影響しませんが、Linux をしっかり学習すると、大きなモデルの学習が非常にスムーズになります。最後に、前に設定したレベルを完了することを忘れないでください。

ブログリンク:リナックス

よくある問題

1. InternStudio の開発マシン環境が壊れています。開発マシン環境を初期化するにはどうすればよいですか?

慎重に実行してください! ! ! !すべてのデータが失われます。これは、InternStudio プラットフォームでのみ使用できます。自分のマシンでは行わないでください。

  • 最初のステップは、ssh 経由でローカル端末を開発マシンに接続することです (操作するには、Web 上ではなく ssh 経由で接続する必要があります!!!)
  • 2 番目のステップの実行 rm -rf /root, 待ち時間は10分ほどかかります
  • 3 番目のステップは、開発マシンを再起動することです。システムは /root パスにある構成ファイルをリセットします。
  • 4番目のステップ ln -s /share /root/share

レベルミッション

レベルミッションをクリアするには、主要な手順でスクリーンショットを撮る必要があります。

ミッションの詳細完了までの所要時間
ミッションSSH接続とポートマッピングを完了して実行しますhello_world.py10分
オプションのタスク 1開発マシンで基本的な Linux コマンドを実行する10分
オプションのタスク 2VSCODE を使用して開発マシンにリモート接続し、conda 環境を作成します。10分
オプションのタスク 3作成して実行するtest.sh書類10分