PCの初期化から始まり、LLM(大規模言語モデル)の開発環境を構築する過程は、初心者にとっても分かりやすいように段階を追って説明します。このプロセスには、必要なソフトウェアのインストールからSSH環境のリモート開発構築、そしてセキュリティ対策まで含まれます。
こちらの記事もおすすめ
必要なソフトウェアのインストール
開発環境を整えるために、以下のソフトウェアが必要になります。
- Docker Desktop Installer
- Git-2.43.0-64-bit
- VSCodeUserSetup-x64-1.86.2
- 551.52-desktop-win10-win11-64bit-international-dch-whql
- ngccli_win_amd64
これらのソフトウェアをダウンロードし、インストールすることから始めます。それぞれの公式サイトから最新版を入手し、指示に従ってインストールを進めてください。
- Dockerを使用した環境構築
Dockerを活用して、必要な開発ツールやライブラリを含むコンテナを構築します。これにより、開発環境を簡単に再現・共有できます。 - VSCodeの設定
Visual Studio Code(VSCode)は、多くの言語に対応した強力なコードエディタです。Remote-SSH拡張機能をインストールすることで、SSH経由でリモートの開発環境に直接接続し、コーディングを行うことができます。 - Gitの利用
ソースコードのバージョン管理にはGitを使用します。Gitを利用することで、コードの変更履歴を効率的に管理し、チームでの開発をスムーズに進めることができます。
Docker Desktop Installer
Docker Desktopは、WindowsやMac上でDockerコンテナを簡単に実行できるように設計されています。コンテナ技術を使用することで、アプリケーションを軽量で移植可能なコンテナにパッケージ化し、異なる環境間で一貫した動作を保証します。Docker Desktopには、開発、テスト、本番環境のシミュレーションを効率化するためのGUI(グラフィカルユーザーインターフェース)が備わっており、Dockerコマンド、コンテナの管理、イメージの作成や共有などを直感的に行えます。
Git
Gitは、分散型バージョン管理システムです。ソフトウェアのソースコード管理に広く使用されており、複数の開発者が同一のプロジェクトに効率的に協力できるように設計されています。Gitを使用することで、各開発者はローカルリポジトリで作業し、変更を中央のサーバーにプッシュすることができます。このバージョン(2.43.0-64-bit)は、64ビットWindowsシステム向けに最適化されており、セキュリティ、パフォーマンス、ユーザビリティの向上が図られています。
VS Code
Visual Studio Code(VSCode)は、Microsoftが開発した無料のソースコードエディタです。軽量でありながら、デバッグ、Gitコントロール、シンタックスハイライト、インテリセンス、スニペット、コードリファクタリングなど、強力な開発支援機能を備えています。このバージョン(1.86.2)は、64ビットのWindowsユーザー向けにリリースされたもので、様々なプログラミング言語のサポートとカスタマイズ性の高さが特徴です。
nVIDIAドライバ
1.52-desktop-win10-win11-64bit-international-dch-whql
この番号は、NVIDIAのグラフィックスドライバのバージョンを指しているようです。WHQL(Windows Hardware Quality Labs)テストに合格し、Microsoftによる認証を受けたドライバであることを示します。DCHは、Windowsのデバイスドライバーモデルの一種で、よりモジュラーな設計を採用しています。このドライバは、Windows 10およびWindows 11の64ビットシステム用に設計されており、最適なグラフィックスパフォーマンスと互換性を提供します。
ngccli_win_amd64
NGC CLI(NVIDIA GPU Cloud Command Line Interface)は、NVIDIAのGPUクラウドレジストリと通信するためのコマンドラインツールです。このツールを使用することで、Dockerイメージ、モデル、スクリプトなど、AIやディープラーニングに関連するさまざまなリソースを簡単に検索、ダウンロード、実行できます。ngccli_win_amd64
は、64ビットWindowsシステム向けにコンパイルされたバージョンを指し、NVIDIAのGPUを活用する開発者にとって強力なツールとなります。
SSH環境の構築
SSHは、セキュアなリモートアクセスを提供するために重要です。WindowsでSSHを利用するためには、まずOpenSSHのクライアントとサーバーをインストールする必要があります。
OpenSSHのインストール
PowerShellを管理者として開き、以下のコマンドを実行してOpenSSHクライアントとサーバーをインストールします。
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
sshdサービスの開始
次に、sshdサービスを開始し、自動起動を設定します。
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'
ファイアウォールの設定
OpenSSHサーバーへの接続を許可するために、ファイアウォールルールを確認し、必要に応じて作成します。
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
}
KEYの設定
このプロセスにより、リモートから安全にPCにアクセスできるようになります。SSHを通じて、コードの編集や管理を行うことができます。
Configの設定
host TURTLETOWER
user makimaki
hostname TURTLETOWER
port 22
identityfile ~/.ssh/id_ed25519
接続テスト
C:\Users\harum>ssh TURTLETOWER
Microsoft Windows [Version 10.0.22631.3155]
(c) Microsoft Corporation. All rights reserved.
xxxxxxxxx@TURTLETOWER C:\Users\MakiMaki>
NVIDIA NGC環境の構築
docker login nvcr.io
よくある問題
Dockerでnvcr.io
へのログイン時に「Error saving credentials: error storing credentials - err: exit status 1, out: A specified logon session does not exist. It may already have been terminated.
」というエラーが発生した場合、この問題はDockerの認証情報の保存方法に関連しています。具体的には、Dockerが外部の認証情報ストア(例えばWindowsのクレデンシャルマネージャー)を使用してログイン情報(ユーザー名とパスワードまたはトークン)を保存しようとした際に問題が発生しています。
解決策
問題の解決策として、.docker\config.json
ファイルからcredsStore
エントリを削除することで、Dockerがデフォルトの認証情報の保存方法(ファイルに直接保存)を使用するように設定を変更します。これにより、上記のエラーが解消される可能性が高くなります。
実際の手順
C:\Users\MakiMaki\.docker\
ディレクトリにあるconfig.json
ファイルをテキストエディタで開きます。- ファイル内で
"credsStore": "desktop",
の行を見つけます。 - この行を削除またはコメントアウトします。
- ファイルを保存し、閉じます。
修正後のconfig.jsonの例
{
"auths": {
"nvcr.io": {}
},
"currentContext": "default",
"plugins": {
"-x-cli-hints": {
"enabled": "true"
}
}
}
この変更により、Dockerは認証情報を.docker\config.json
ファイル内に直接保存するようになります。これは、特に個人使用や開発環境など、セキュリティ要件が厳しくない場合に便利な方法です。ただし、セキュリティが重要な環境では、認証情報を安全に管理するための適切な手段を検討することが重要です。
注意点
credsStore
を削除することで、認証情報がローカルに保存されるようになるため、セキュリティの観点から注意が必要です。- Dockerのバージョンや実行環境によっては、他の解決策や追加の設定が必要になる場合があります。
LLaMA-Factory
リポジトリ
docker-compose.ymlの解説
docker-compose.yml
services:
factory:
build:
context: . # Dockerfileが置かれているディレクトリのパス。
dockerfile: Dockerfile # ビルドに使用するDockerfileの名前。
shm_size: '16gb' # コンテナの共有メモリサイズ。データ処理やモデルトレーニングに必要な大量のメモリを確保。
environment:
- CUDA_LAUNCH_BLOCKING=1 # CUDAの処理を同期的に実行するための環境変数。
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1 # 使用するNVIDIA GPUの台数。
capabilities: [ gpu ] # コンテナがGPU機能を使用することを示す。
volumes:
- .:/Factory # ホストの現在のディレクトリをコンテナの/Factoryにマウント。
command:
/bin/bash -c "CUDA_VISIBLE_DEVICES=0 python src/train_web.py" # コンテナ起動時に実行するコマンド。特定のGPUでPythonスクリプトを実行。
working_dir: /Factory # コンテナ内の作業ディレクトリ。
ports:
- "7860:7860" # コンテナの7860ポートをホストの7860ポートにマッピング。
tty: true # コンテナにTTYを割り当て、インタラクティブモードで実行。
このYAMLファイルは、Docker Composeを使用して、特に機械学習モデルのトレーニングなど、GPUリソースを必要とするアプリケーションのデプロイメントを構成する際に使用されます。各構成要素は、コンテナのビルド、実行環境、リソース使用、および実行コマンドなど、アプリケーションが適切に機能するために必要な設定を提供します。
特に、deploy
セクションのresources
の設定は、DockerがNVIDIA GPUを認識し、アプリケーションがGPUリソースを利用できるようにするために重要です。また、environment
セクションで設定されるCUDA_LAUNCH_BLOCKING=1
は、デバッグ時に役立つCUDAの動作を制御します。
コンテナの起動
makimaki@TURTLETOWER C:\Users\MakiMaki\Prj\LLaMA-Factory>docker-compose up
[+] Running 2/0
✔ Network llama-factory_default Created 0.0s
✔ Container llama-factory-factory-1 Created 0.1s
Attaching to factory-1
factory-1 |
factory-1 | =============
factory-1 | == PyTorch ==
factory-1 | =============
factory-1 |
factory-1 | NVIDIA Release 24.01 (build 80741402)
factory-1 | PyTorch Version 2.2.0a0+81ea7a4
factory-1 |
factory-1 | Container image Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
factory-1 |
factory-1 | Copyright (c) 2014-2023 Facebook Inc.
factory-1 | Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert)
factory-1 | Copyright (c) 2012-2014 Deepmind Technologies (Koray Kavukcuoglu)
factory-1 | Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu)
factory-1 | Copyright (c) 2011-2013 NYU (Clement Farabet)
factory-1 | Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou, Iain Melvin, Jason Weston)
factory-1 | Copyright (c) 2006 Idiap Research Institute (Samy Bengio)
factory-1 | Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz)
factory-1 | Copyright (c) 2015 Google Inc.
factory-1 | Copyright (c) 2015 Yangqing Jia
factory-1 | Copyright (c) 2013-2016 The Caffe contributors
factory-1 | All rights reserved.
factory-1 |
factory-1 | Various files include modifications (c) NVIDIA CORPORATION & AFFILIATES. All rights reserved.
factory-1 |
factory-1 | This container image and its contents are governed by the NVIDIA Deep Learning Container License.
factory-1 | By pulling and using the container, you accept the terms and conditions of this license:
factory-1 | https://developer.nvidia.com/ngc/nvidia-deep-learning-container-license
factory-1 |
factory-1 | Running on local URL: http://0.0.0.0:7860
factory-1 | Running on public URL: https://2a9718a30722c5a502.gradio.live
factory-1 |
factory-1 | This share link expires in 72 hours. For free permanent hosting and GPU upgrades, run `gradio deploy` from Terminal to deploy to Spaces (https://huggingface.co/spaces)
コメント