PCを初期化してからLLMのリモート開発環境(LLaMA-Factory)を構築するまで

LLM

PCの初期化から始まり、LLM(大規模言語モデル)の開発環境を構築する過程は、初心者にとっても分かりやすいように段階を追って説明します。このプロセスには、必要なソフトウェアのインストールからSSH環境のリモート開発構築、そしてセキュリティ対策まで含まれます。


こちらの記事もおすすめ

無料枠Google Colab で LLaMA-Factory をやってみた
はじめにGoogle Colabは、ブラウザ上でPythonを実行できる無料のサービスです。これを使って、LLaMA-Factoryを動かしてみましょう。LLaMA-Factoryは、大規模言語モデル(LLM)のファインチューニングを容易に...

必要なソフトウェアのインストール

開発環境を整えるために、以下のソフトウェアが必要になります。

  • 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

これらのソフトウェアをダウンロードし、インストールすることから始めます。それぞれの公式サイトから最新版を入手し、指示に従ってインストールを進めてください。

  1. Dockerを使用した環境構築
    Dockerを活用して、必要な開発ツールやライブラリを含むコンテナを構築します。これにより、開発環境を簡単に再現・共有できます。
  2. VSCodeの設定
    Visual Studio Code(VSCode)は、多くの言語に対応した強力なコードエディタです。Remote-SSH拡張機能をインストールすることで、SSH経由でリモートの開発環境に直接接続し、コーディングを行うことができます。
  3. Gitの利用
    ソースコードのバージョン管理にはGitを使用します。Gitを利用することで、コードの変更履歴を効率的に管理し、チームでの開発をスムーズに進めることができます。

Docker Desktop Installer

Docker Desktopは、WindowsやMac上でDockerコンテナを簡単に実行できるように設計されています。コンテナ技術を使用することで、アプリケーションを軽量で移植可能なコンテナにパッケージ化し、異なる環境間で一貫した動作を保証します。Docker Desktopには、開発、テスト、本番環境のシミュレーションを効率化するためのGUI(グラフィカルユーザーインターフェース)が備わっており、Dockerコマンド、コンテナの管理、イメージの作成や共有などを直感的に行えます。

Docker Desktop
Dockerデスクトップは、開発者向けの共同コンテナ化ソフトウェアです。 今すぐ Docker Desktop を Mac、Windows、または Linux でダウンロードしましょう。

Git

Gitは、分散型バージョン管理システムです。ソフトウェアのソースコード管理に広く使用されており、複数の開発者が同一のプロジェクトに効率的に協力できるように設計されています。Gitを使用することで、各開発者はローカルリポジトリで作業し、変更を中央のサーバーにプッシュすることができます。このバージョン(2.43.0-64-bit)は、64ビットWindowsシステム向けに最適化されており、セキュリティ、パフォーマンス、ユーザビリティの向上が図られています。

Git for Windows
We bring the awesome Git VCS to Windows

VS Code

Visual Studio Code(VSCode)は、Microsoftが開発した無料のソースコードエディタです。軽量でありながら、デバッグ、Gitコントロール、シンタックスハイライト、インテリセンス、スニペット、コードリファクタリングなど、強力な開発支援機能を備えています。このバージョン(1.86.2)は、64ビットのWindowsユーザー向けにリリースされたもので、様々なプログラミング言語のサポートとカスタマイズ性の高さが特徴です。

https://azure.microsoft.com/ja-jp/products/visual-studio-code

nVIDIAドライバ

1.52-desktop-win10-win11-64bit-international-dch-whql

この番号は、NVIDIAのグラフィックスドライバのバージョンを指しているようです。WHQL(Windows Hardware Quality Labs)テストに合格し、Microsoftによる認証を受けたドライバであることを示します。DCHは、Windowsのデバイスドライバーモデルの一種で、よりモジュラーな設計を採用しています。このドライバは、Windows 10およびWindows 11の64ビットシステム用に設計されており、最適なグラフィックスパフォーマンスと互換性を提供します。

最新の NVIDIA 公式ドライバーをダウンロード
最新の NVIDIA 公式ドライバーをダウンロード

ngccli_win_amd64

NGC CLI(NVIDIA GPU Cloud Command Line Interface)は、NVIDIAのGPUクラウドレジストリと通信するためのコマンドラインツールです。このツールを使用することで、Dockerイメージ、モデル、スクリプトなど、AIやディープラーニングに関連するさまざまなリソースを簡単に検索、ダウンロード、実行できます。ngccli_win_amd64は、64ビットWindowsシステム向けにコンパイルされたバージョンを指し、NVIDIAのGPUを活用する開発者にとって強力なツールとなります。

NVIDIA NGC

SSH環境の構築

SSHは、セキュアなリモートアクセスを提供するために重要です。WindowsでSSHを利用するためには、まずOpenSSHのクライアントとサーバーをインストールする必要があります。

Windows 用 OpenSSH の概要
Windows 用 OpenSSH Client および Server を使用してリモート コンピューターをインストールしてリモート コンピューターに接続する方法について説明します。

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の設定

Windows 用 OpenSSH でのキーベースの認証
組み込みの Windows ツールまたは PowerShell を使用した Windows 用 OpenSSH Server キーベースの認証、生成、展開について説明します。

このプロセスにより、リモートから安全に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
NGC(NVIDIA GPU CLOUD)のシステム要件および登録手順
NGC(NVIDIA GPU CLOUD)のシステム要件および登録手順
nvidia/tensorflowコンテナイメージでShow and Tell - Qiita
NVIDIA GPU CLOUDのnvidia/tensorflowコンテナイメージで、Show and Tell: A Neural Image Caption Generatorを試す。システ…

よくある問題

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がデフォルトの認証情報の保存方法(ファイルに直接保存)を使用するように設定を変更します。これにより、上記のエラーが解消される可能性が高くなります。

実際の手順

  1. C:\Users\MakiMaki\.docker\ディレクトリにあるconfig.jsonファイルをテキストエディタで開きます。
  2. ファイル内で"credsStore": "desktop",の行を見つけます。
  3. この行を削除またはコメントアウトします。
  4. ファイルを保存し、閉じます。

修正後のconfig.jsonの例

{
    "auths": {
        "nvcr.io": {}
    },
    "currentContext": "default",
    "plugins": {
        "-x-cli-hints": {
            "enabled": "true"
        }
    }
}

この変更により、Dockerは認証情報を.docker\config.jsonファイル内に直接保存するようになります。これは、特に個人使用や開発環境など、セキュリティ要件が厳しくない場合に便利な方法です。ただし、セキュリティが重要な環境では、認証情報を安全に管理するための適切な手段を検討することが重要です。

注意点

  • credsStoreを削除することで、認証情報がローカルに保存されるようになるため、セキュリティの観点から注意が必要です。
  • Dockerのバージョンや実行環境によっては、他の解決策や追加の設定が必要になる場合があります。

LLaMA-Factory

リポジトリ

GitHub - Sunwood-ai-labs/LLaMA-Factory: Easy-to-use LLM fine-tuning framework (LLaMA, BLOOM, Mistral, Baichuan, Qwen, ChatGLM)
Easy-to-use LLM fine-tuning framework (LLaMA, BLOOM, Mistral, Baichuan, Qwen, ChatGLM) - GitHub - Sunwood-ai-labs/LLaMA-Factory: Easy-to-use LLM fine-tuning fra...

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)

file

コメント

タイトルとURLをコピーしました