プライベートな連絡先の最初の情報
送料メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
この記事は、上海人工知能研究室が主催する第 3 回学者向け大規模モデル演習キャンプのメモです。個人およびティーチングアシスタントが宿題を添削する際の参考としてのみ使用してください。チュートリアルの元のリンク。
登録するには、WeChatで「第3回 学者モデル練習キャンプ」を検索してください。
このメモは、元のチュートリアルに基づいて修正され、個人的に注釈が付けられたメモです。
😀Hello大家好,欢迎来到学者大型モデル実践キャンプは、初めて実践キャンプに参加する学生や、Linuxの基礎知識のない様々な業界の学生を対象に、実践キャンプが用意した基礎コースの使い方を教えます。InternStudio 開発マシン、そしていくつかの基本をマスターしてくださいLinuxの知識 、次のコースでどこから始めればよいかわからないということがないように、皆さんのお役に立てれば幸いです。ここのレベルタスクにはいくつかのレベルタスクが用意されています。必要なレベルタスクを完了してチェックインすると、現在のレベルのコンピューティングパワー報酬を受け取ります。はじめましょう!
InternStudio 是大模型时代下的云端算力平台。基于 InternLM 组织下的诸多算法库支持,为开发者提供开箱即用的大语言模型微调环境、工具、数据集,并完美兼容 🤗 HugginFace 开源生态。
InternStudio について詳しく知りたい場合は、次のドキュメントを確認してください。 インターンスタジオ
https://studio.intern-ai.org.cn/
まず上のリンクを開いて InternStudio にログインすると、次の図に示すように、コンソール インターフェイスに自動的に移動します。
各シリアル番号に対応するページの機能を説明します。
上記は、InternStudio プラットフォームの簡単な紹介です。ホームページにアクセスして、「」をクリックして開発マシンを作成する方法を見てみましょう。開発マシンを作成する”
ここでは作成することを選択します個人開発マシン、という名前のテスト,クーダバージョンは12.2ですが、資源の配分10% を選択すると、デフォルトの期間で問題ありません。
作成が完了したら、開発機インターフェイス上に作成した開発マシンが表示されます。クリックして開発マシンに入ります。
開発マシンに入ると、開発マシンのメイン ページが表示され、次の 3 つのモードから選択できます。JupyterLab、ターミナル、VScode
で:
上記で紹介したInternStudio プラットフォーム、および開発マシンの作成方法についてこのセクションでは理解したいと思います。パスワード、リモート接続を使用する理由, SSHの使い方リモート接続開発機って何ですか?ポートマッピングそしてどのように進めるかポートマッピング。
パスワード正式名称はSecure Shellで、中国語に訳すとセキュアシェルとなります。ネットワークセキュリティプロトコル 、暗号化と認証のメカニズムにより、安全なアクセスやファイル転送などのサービスを実現します。 SSH プロトコルは、ネットワーク データを暗号化および認証することにより、安全でないネットワーク環境で安全なネットワーク サービスを提供します。
SSH は (C/S アーキテクチャ) によるものです。サーバそしてクライアント安全な SSH チャネルを確立するには、双方が最初に TCP 接続を確立し、次に使用されるバージョン番号とさまざまなアルゴリズムをネゴシエートして、同じものを生成する必要があります。セッションキー後続の対称暗号化に使用されます。ユーザー認証が完了すると、両者はデータ交換のためのセッションを確立できます。
その後の練習では、SSHキーを構成する、構成キーは、開発マシンにリモートで接続するときにパスワードを繰り返し入力する必要がないようにするためのものです。なぜリモート接続するのでしょうか??
リモート接続の利点は、リモート オフィスを使用している場合、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-smi
GPU 情報を確認します。これらのコマンドについては後で説明します。リモート接続を終了する場合は、コマンドを 2 回入力します。exit
それでおしまい。
しかし、開発や勉強をする際、毎回リモートでパスワードを入力するのは面倒ですが、sshコマンドでパスワードを入力する手間を省くことができます。sshキー生成キーを生成するコマンド
SSH キーは、SSH プロトコルでの認証と暗号化通信に使用される、安全で便利なログイン認証方法です。
sshキー生成RSA と DSA の両方の認証キーをサポートします。
一般的に使用されるパラメータは次のとおりです。
ここでは RSA アルゴリズムを使用してキーを生成します。コマンドは次のとおりです。
ssh-keygen -t rsa
コマンドを入力した後ずっと入ってください以上です。ここでのキーはデフォルトで生成されます。~/.ssh/
ディレクトリの下に、~
ホームディレクトリを指します。Windows の場合は、C:Users{your_username}
。PowerShellで使用可能Get-Content
生成されたキーを表示するコマンド。Linux オペレーティング システムの場合に使用できます。cat
注文。
次に、開発マシンのプラットフォームに戻り、ホームページの [構成] をクリックします。SSHキーをクリックしてから、SSH公開キーを追加する,
生成したキーをコピーして公開キー ボックスに貼り付けます。最後に、[今すぐ追加] をクリックすると、SSH キーの設定が完了します。
SSHキーの作成が完了したら再起動しますターミナルリモート接続する場合は、パスワードの入力手順は省略されます。
もちろん、次のような 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
次の構成オプションの一部を手動で追加する場合は、上記の形式に従って対応する部分を変更する必要があります。
もし *
StrictHostKeyChecking
no
そしてUserKnownHostsFile
*/dev/null
指紋認証のために表示されるポップアップ ウィンドウを削除します。
StrictHostKeyChecking no
厳密なホスト キー チェックが無効になっていることを示します。これは、新しい SSH サーバーに接続するときにサーバーのホスト キーが厳密に検証されないことを意味し、一定のセキュリティ リスクが生じる可能性があります。
UserKnownHostsFile /dev/null
ユーザーに既知のホスト キー ファイルを /dev/null に設定します。これにより、既知のホスト キーの記録と使用が基本的に無視されます。ただし、一般的なセキュリティ慣行では、厳密なホスト キー チェックを恣意的に無効にすることはお勧めできません。
次に、右下隅にポップアップ表示されるプロンプト ウィンドウで [接続] をクリックして、開発マシンにリモート接続します。
リモート接続が完了したら、開くフォルダー (作業ディレクトリとも呼ばれます) を選択できます。開発マシン内のフォルダーは、前述したものです。クラウドディスク。
次回リモート接続するときは、ログインコマンドなどを入力する必要はなく、次のように vscode のリモート接続を開いて最初の接続時の開発マシン情報を確認するだけです。root
これは、最初に開発マシンに接続するときに、/root
作品リスト。
そして下の写真では->
開発マシンに入った後、作業ディレクトリを再選択する必要があることを示します。
そして下の写真では->
最後の開発マシンによって選択された作業ディレクトリに入ることを示します。
毎回選択される作業ディレクトリは、開発マシン情報の下に表示されます: (ここには、lagent 用の追加の作業ディレクトリがあります)
次にご紹介するのは、ポートマッピング。
ポートマッピング外部ネットワークの任意のポートを内部ネットワークの対応するポートにマッピングして、内部ネットワークと外部ネットワーク間の通信を実現するネットワーク技術です。ポート マッピングを通じて、イントラネット内のサービスやアプリケーションに外部ネットワークからアクセスし、ネットワーク上で便利な通信を実現できます。
では、開発マシンを使用するときにポート マッピングを実行する必要があるのはなぜでしょうか?
後続のコースではモデルを実施するため、ウェブデモ導入の実践では、このプロセス中に 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
上記はポート マッピングのコマンドであり、ホスト上でこのコマンドを実行してポート マッピングのプロセスを理解します。
個人用 PC は、開発マシンの唯一の公開ポート 37367 にリモート接続し (これは SSH 中に説明されており、各開発マシンの公開ポートは異なります)、トンネル オプションを設定します。公開されたポートは、トラフィックを転送するための中継ステーションとして機能します。
-C
: 圧縮を有効にして、転送されるデータ量を削減します。-N
: リモート コマンドは実行せず、トンネルを確立するだけです。-g
: リモート ホストがローカルに転送されたポートに接続できるようにします。この SSH コマンドが個人の PC で実行されると、SSH クライアントはローカル マシンのポート 7860 で待機します。
ローカル ポート 7860 に送信されたトラフィックは、SSH トンネルによってリモート サーバーのアドレス 127.0.0.1 のポート 7860 に転送されます。
これは、開発マシンのこのポートが外部ネットワークに直接公開されていない場合でも、このトンネルを通じてリモート サーバー上のサービスに安全にアクセスできることを意味します。 。
引き続き開発マシンのインターフェイスに移動し、開発マシンを見つけて、カスタムサービス、最初のコマンドをコピーし、
ssh -p 37367 [email protected] -CNg -L {本地机器_PORT}:127.0.0.1:{开发机_PORT} -o StrictHostKeyChecking=no
コマンドの各部分の意味を彼に紹介しましょう。
-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()
編集後に思い出す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
これは成功を表します。 (知らせ: このコマンドはコンテンツを返しません。これは、ポート マッピングが実行中であることを意味します。その後、Web ページで接続を開くと Web UI インターフェイスが表示されます)
もちろん、異なるWeb UIを実行する場合は、コマンドを繰り返し入力する必要があり、非常に面倒なので、VScodeを使用する必要があります。開発マシンを SSH 経由でリモートに接続しました。VScode は自動ポート マッピングを提供します。「Ctrl+Shift+~」ショートカット キーを使用できます。端末を起動します、ポート オプションはターミナルの右側にあります。
ここでポート マッピング情報を表示でき、ポートを変更する必要がある場合は、ポート列のポート番号を変更できます。
このパートでは、Linux のいくつかの側面を理解していただきます。基本操作 、いくつかのツールを使用します。問題が発生したときに誰もが自分で解決できるように、何か問題が発生した場合は、ここにコメントしてください。すぐに回答します。
私たちが使っているので開発機ほとんど使われません権限管理 , なので紹介しません。 (以下の操作は全てVScodeターミナル上で行います)
Linux では、一般的なファイル管理操作には次のようなものがあります。
touch
コマンドは空のファイルを作成します。mkdir
注文。cd
注文。pwd
注文。cat
ファイルの内容全体を直接表示します。more
そしてless
ページ単位で閲覧できます。vi
またはvim
編集者を待ちます。cp
注文。ln
注文。mv
注文。rm
注文。rmdir
(空のディレクトリのみ削除可能) または rm -r
(空でないディレクトリは削除できます)。find
注文。ls
コマンドの使用など ls -l
ディレクトリ内のファイルに関する詳細情報を表示します。sed
注文。このコースで使用するいくつかのコマンドを次に示します。
タッチを使用してファイルをすばやく作成できるため、ファイルを作成するために手動でクリックする必要はありません。たとえば、demo.py
書類:
同様に、次の名前のファイルを作成する場合は、test
ディレクトリ:
このコマンドは最も一般的に使用されるコマンドです。使用する前に、コンピューターのスキルを持たない生徒にディレクトリ構造を説明し、全員が理解できるように図を描く必要があります。
私たちが今使っているのは、root
ディレクトリ。これは root ユーザーのホーム ディレクトリでもあります。~
、Linuxオペレーティングシステムの場合/
ルート ディレクトリを表します。ルート ディレクトリには、システムに必要な多くのディレクトリとファイルが存在します。root
ディレクトリ、その中には.
現在のディレクトリを表します。..
表される親ディレクトリ。今入ったらtest
ディレクトリに戻って、root
ディレクトリでは、次のようにすることができます。
私たちは使うことができますpwd
現在のディレクトリを表示するコマンド: これにより、現在どのディレクトリにいるかを簡単に判断できるようになります。
cat
このコマンドはファイルの内容を表示でき、さらに多くのコマンドを使用できます。--help
表示するコマンド:
ファイルを編集する必要があるときに使用できますvi
またはvim
コマンドでファイル編集を開始すると、次の 3 つのモードがあります。
使用する編集モードに入るi
, vim の便利な点は、ターミナル上で簡単なファイル変更ができることです。
**cp
**このコマンドは、次のコースで頻繁に使用されます。一般的な用途は次のとおりです。
cp 源文件 目标文件
cp -r 源目录 目标目录
ただし、モデルを使用したい場合、この操作は多くのディスク容量を消費するため、通常は次のコマンドを使用します。ln
コマンド、これは Windows のショートカットと同じです。 Linux には 2 種類のリンクがあります。 ハードリンク(ハードリンク)付きソフトリンク (シンボリック リンク)、ハード リンクはファイルに複数の名前を付けることができることを意味しますが、ソフト リンクは、コンテンツが別のファイルの場所を指す特別なファイルを生成します。ハード リンクは同じファイル システム内に存在しますが、ソフト リンクは異なるファイル システムにまたがることができます。
したがって、一般的にはソフト接続を使用します。一般的な使用方法は次のとおりです。
ln [参数][源文件或目录][目标文件或目录]
パラメータは次のとおりです。
mv
コマンドとrm
コマンドは同様の方法で使用されますが、mv
ファイルやディレクトリの移動に使用され、名前を変更することもできます。rm
このコマンドは、ファイルまたはディレクトリを削除するために使用されます。
一般的に使用される方法は次のとおりです。
一般的に使用されるパラメータ:
-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
。
find
このコマンドは、Linux システムの強力なファイル検索ツールであり、指定されたディレクトリおよびそのサブディレクトリ内で条件を満たすファイルまたはディレクトリを検索し、対応する操作を実行します。
以下はfind
コマンドの一般的な使用例は次のとおりです。
-name
ファイル名でファイルを検索するオプション。例えば、find /path/to/directory -name "file.txt"
指定されたディレクトリとそのサブディレクトリを検索します。file.txt
書類。-type
ファイルタイプ別にファイルを検索するオプション。例えば、find /path/to/directory -type f
指定したディレクトリとそのサブディレクトリ内のすべての通常のファイルが検索されます。-size
ファイル サイズでファイルを検索するオプション。例えば、find /path/to/directory -size +100M
指定したディレクトリとそのサブディレクトリで 100MB を超えるファイルを検索します。-mtime
、-atime
または-ctime
オプションは、変更時間、アクセス時間、またはステータス変更時間に基づいてファイルを検索します。例えば、find /path/to/directory -mtime -7
指定されたディレクトリとそのサブディレクトリ内で 7 日以内に変更されたファイルを検索します。-perm
ファイル権限に基づいてファイルを検索するオプション。例えば、find /path/to/directory -perm 755
指定されたディレクトリとそのサブディレクトリでアクセス許可 755 のファイルが検索されます。-user
または-group
オプションは、所有者またはグループ別にファイルを検索します。例えば、find /path/to/directory -user username
ユーザーに属する指定されたディレクトリとそのサブディレクトリを検索しますusername
書類。-exec
オプションは、見つかったファイルに対して対応する操作を実行できます。例えば、find /path/to/directory -name "*.txt" -exec rm {} ;
で終わる見つかったすべてを削除します.txt
最後にファイルを付けます。ls
このコマンドは、ディレクトリの内容を一覧表示するだけでなく、詳細。
よく使用されるパラメータと使用方法は次のとおりです。
-a
: 隠しファイルを含むすべてのファイルとディレクトリを表示します。.
.) で始まるファイルまたはディレクトリ。-l
: ファイルの権限、所有者、サイズ、変更時刻などの詳細情報を長い形式で表示します。-h
:そして-l
人間が判読できる方法でファイル サイズを表示するために組み合わせて使用されます (例:K
、M
、G
待って)。-R
: サブディレクトリの内容を再帰的に一覧表示します。-t
:ファイル更新時刻順に表示します。 、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 をファイルに出力する 一般的に使用されるパイプ文字には次のものがあります。<
そして|
たとえば、次のように使用できます。grep
Pythonでインストールされているインクルードを表示するコマンドos
フィールドパッケージ:
grep
強力なテキスト検索ツールです。一般的に使用されるパラメータは次のとおりです。
-i
:大文字と小文字を区別せずに検索します。-v
: 一致を反転します。つまり、一致しない行を表示します。-n
:行番号を表示します。-c
: 一致する行の数をカウントします。プロセス管理コマンドはシステム監視とプロセス管理のための重要なツールであり、一般的に使用されるプロセス管理コマンドには次のようなものがあります。
開発マシンには特別なコマンドもありますnvidia-smi
は、NVIDIA システム管理インターフェイスのコマンド ライン ツールで、NVIDIA GPU デバイスの監視と管理に使用されます。 GPU のステータス、使用状況、温度、メモリ使用量、電力使用量、GPU 上で実行されているプロセスなどの情報を簡単に表示する方法を提供します。
各コマンドの使用例を次に示します。
ps
: 現在のシステム内のプロセスをリストします。次のようなさまざまなオプションを使用して、さまざまなプロセス情報を表示できます。ps aux # 显示系统所有进程的详细信息
top
: システム内のプロセスのステータスを動的に表示します。プロセス リストをリアルタイムで更新し、CPU とメモリの使用率が最も高いプロセスを表示します。top # 启动top命令,动态显示进程信息
pstree
:現在実行中のプロセスとその親子関係を樹形図で表示します。 pstree # 显示进程树
pgrep
: 条件に一致するプロセスを検索します。プロセス名やユーザーなどの条件でプロセスを検索できます。pgrep -u username # 查找特定用户的所有进程
nice
: プロセスの優先度を変更します。nice
値が小さいほど、プロセスの優先度が高くなります。nice -n 10 long-running-command # 以较低优先级运行一个长时间运行的命令
jobs
: バックグラウンドで実行されているプロセスを含む、現在のターミナル セッション内のジョブのリストを表示します。 jobs # 列出当前会话的后台作业
bg
そしてfg
:bg
中断されたプロセスをバックグラウンドで実行させ、fg
バックグラウンドプロセスをフォアグラウンドに戻します。bg # 将最近一个挂起的作业放到后台运行
fg # 将后台作业调到前台运行
kill
: 指定されたプロセスにシグナルを送信します。通常はプロセスを強制終了するために使用されます。 kill PID # 杀死指定的进程ID
知らせ、kill
コマンドはデフォルトで送信されますSIGTERM
プロセスが応答しない場合に使用できるシグナル-9
使用SIGKILL
Signal はプロセスを強制的に強制終了します。
kill -9 PID # 强制杀死进程
SIGTERM
(シグナル終了) シグナルは、Unix および Unix 系オペレーティング システムでプロセスの終了を要求するために使用される標準シグナルです。この信号は通常、システムまたはユーザーがプロセスを正常にシャットダウンしたいときに送信されます。そしてSIGKILL
信号も違うし、SIGTERM
プロセスによってシグナルをキャッチして処理できるため、プロセスは終了する前にクリーンアップできます。 (インターネットから)
以下は nvidia-smi
コマンドの基本的な使用法をいくつか示します。
nvidia-smi
nvidia-smi -l 1
このコマンドはステータス情報を 1 秒ごとに更新します。
nvidia-smi -h
nvidia-smi pmon
nvidia-smi --id=0 --ex_pid=12345
これにより、GPU ID 0 上の PID 12345 のプロセスが強制終了されます。
nvidia-smi -pm 1
nvidia-smi -i 0 -pm 1
最初のコマンドはすべての GPU をパフォーマンス モードに設定し、2 番目のコマンドは ID 0 の GPU のみをターゲットにします。
nvidia-smi --id=0 -r
これにより、GPU が ID 0 で再起動されます。
nvidia-smi -h
以下に、画像による GPU 情報の紹介を示します。
ここにツールがありますTMUX
,TMUX
端末マルチプレクサです。これにより、複数の端末間の切り替え、端末の接続解除 (端末は強制終了されず、バックグラウンドで実行し続けます)、および他の端末への再接続が簡単になります。このツールを導入する理由後でやるからXtuner
モデルを微調整すると、時間がかかります。Tmux
プログラムが強制終了されて中断される状況を解決できます。インストール方法と使用方法は次のとおりです。
開発マシンは ubuntu オペレーティング システムを使用しているため、次を使用できます。lsb_release -a
ubuntu システム情報を表示するコマンド:
そして使用しますapt install tmux
tmux をインストールするコマンド。インストールが完了すると使用できるようになります。tmux
tmux を終了したい場合は、コマンドで tmux を使用できます。Ctrl+D"ショートカットキー。
開発マシンでは、/root パスにあるファイルのみが永続的に保存され、他のパスにインストールされたソフトウェアは再起動後にリセットされます。
具体的な使用方法は以下でご覧いただけます。
https://www.ruanyifeng.com/blog/2019/10/tmux.html
Conda は、Windows、macOS、Linux 上で動作するオープンソースのパッケージ管理および環境管理システムです。ソフトウェア パッケージとその依存関係を迅速にインストール、実行、更新します。 Conda を使用すると、ローカル マシン上でさまざまな環境を簡単に作成、保存、読み込み、切り替えることができます。
開発マシンにはすでにインストールされていますconda
直接使用することもできますが、開発マシンに組み込まれたものもありますconda
注文studio-conda
、以下で紹介していきますconda
と の基本的な使い方studio-conda
使い方と導入方法studio-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
しかし、私たちが普段使っているのは、pip
パッケージのインストールは後ほど紹介しますpip
そしてconda
違い。
conda の構成情報を表示したい場合は、次を使用できます。conda config --show
コマンドを実行すると、それが開発マシンのデフォルト設定の場合、次が返されます: (情報の一部)
これらの構成は次のとおりです。Conda
環境設定は、ソフトウェア パッケージのインストール、アップデート、環境管理、その他の操作の方法と結果に影響します。
この部分はconda
中非常重要的一部分,掌握了这一部分大家就可以将开发环境玩转到飞起了😀。
私たちは使うことができますconda create -n name python``=3.10
仮想環境を作成します。これは、Python バージョン 3.10 と名前の仮想環境が作成されることを意味します。作成後にできることは、.conda
ディレクトリの下にあるenvs
ディレクトリ内に見つかりました。
Python のバージョンを指定しない場合は、最新の Python バージョンに基づいた仮想環境が自動的に作成されます。同時に、仮想環境の作成中に必要なパッケージをインストールできます。conda create -n name numpy matplotlib python=3.10
(ただし、このような使い方はお勧めしません)
仮想環境を作成するための共通パラメータは次のとおりです。
どの仮想環境があるかを確認したい場合は、次のコマンドを使用できます。
conda env list
conda info -e
conda info --envs
同時に、環境が配置されているディレクトリも確認できます。
仮想環境を作成したら、使用できるようになりますconda activate name
コマンドを使用して仮想環境をアクティブ化しますが、切り替えが成功したかどうかを確認するにはどうすればよいですか?簡単です、見てください(base)
作成した仮想環境の名前になるかどうか。
仮想環境を終了したい場合は、以下を使用できます。
conda activate
conda deactivate
両方のコマンドが返されますbase
環境だからbase
conda の基本的な環境をよく観察してみると、base
環境ディレクトリは、他の仮想環境ディレクトリよりも上位にあります。
仮想環境を削除したい場合は、次を使用できます。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
たとえば、xtuner0.1.17
仮想環境がエクスポートされ、構成情報は次のようになります。
これらには以下が含まれます環境名、仮想環境パッケージのオンライン リポジトリの場所そして仮想環境の依存関係 。後で、高度な使用方法を使用して、仮想環境を迅速に復元します。
このパートではいくつか紹介しますconda
そしてpip
いくつかの違い:
車輪 Pythonのインストールパッケージの形式です。
これは、conda のコンパイル済みバイナリに似た、プリコンパイルされたバイナリ配布形式です。
Wheel 形式の主な利点は次のとおりです。
- 高速インストール: 事前にコンパイルされているため、インストール中にソース コードのインストールなどのコンパイル プロセスを実行する必要がなく、時間を節約できます。
- 一貫性: インストール結果がさまざまなシステムや環境にわたって一貫していることを保証します。
たとえば、大規模な Python ライブラリをインストールする場合、Wheel 形式を使用すると、マシンごとのコンパイル環境の違いによって引き起こされるインストールの問題を回避できます。さらに、コンパイル環境がないシステムやコンパイル機能が弱いシステムの場合、Wheel 形式を使用するとインストール プロセスがよりスムーズになります。
この部分は非常に興味深く、非常に実践的だと思うので拡張部分です。興味があれば学習してください。
まずは紹介しましょうstudio-conda
これは開発マシンの組み込みコマンドであり、シェル スクリプトを通じて実装されます。シェルスクリプトとは何ですか?
シェルスクリプト Unix/Linux または同様のオペレーティング システム環境でタスクを自動化するために、特定の順序で配置された一連のコマンドを含むテキスト ファイル。
シェル スクリプトは通常、シェル言語で記述されます。Bash や Sh などの一般的なシェル言語は、先ほど紹介したシェル言語に属する基本的な Linux コマンドです。
次の重要な機能があります。
それ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"
export
環境変数を設定するために使用されます。alias
sh ファイルを変数にコピーすることです。これはターミナルでコマンドとして実行できます。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
このスクリプトは、 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 $@
それらの中の一つ*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}
プリセット環境の圧縮パッケージを解凍し、クローンによって仮想環境を作成します。ただし、シェル スクリプトにもいくつかのロジックが設定されていますが、これはプログラミング言語に精通していればできるはずです。理解できなくても、それは大きな問題ではありません。
では、独自に作成した環境を追加するにはどうすればよいですか?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
シェル スクリプトの作成が完了したら、スクリプトにアクセス許可を付与する必要があります。次のコマンドを使用できます。chmod +x test.sh
、次に入力します./test.sh restore xtuner0.1.17
Enter キーを押して仮想環境を復元します。
ただし、この操作は開発マシンでの操作とあまり変わりません。studio-conda
コマンドを組み合わせると非常に便利ですが、環境をコピーする方法が異なります。したがって、それを実装したい場合は、次のことを行う必要があります。/share/install_conda_env.sh
ファイルのロジックが変更されます。
さて、このレベルの内容はこれですべてです。Linux の使い方はわかりませんが、上記の内容が今後皆さんに役立つことを願っています。 , 大きなモデルは学習にあまり影響しませんが、Linux をしっかり学習すると、大きなモデルの学習が非常にスムーズになります。最後に、前に設定したレベルを完了することを忘れないでください。
ブログリンク:リナックス
慎重に実行してください! ! ! !すべてのデータが失われます。これは、InternStudio プラットフォームでのみ使用できます。自分のマシンでは行わないでください。
rm -rf /root
, 待ち時間は10分ほどかかりますln -s /share /root/share
レベルミッションをクリアするには、主要な手順でスクリーンショットを撮る必要があります。
ミッションの詳細 | 完了までの所要時間 | |
---|---|---|
ミッション | SSH接続とポートマッピングを完了して実行しますhello_world.py | 10分 |
オプションのタスク 1 | 開発マシンで基本的な Linux コマンドを実行する | 10分 |
オプションのタスク 2 | VSCODE を使用して開発マシンにリモート接続し、conda 環境を作成します。 | 10分 |
オプションのタスク 3 | 作成して実行するtest.sh 書類 | 10分 |