
独自のLLMをEAに統合する(第2部):環境展開例
はじめに
前回の記事では、LLMをローカルで実行するための基本的なハードウェア知識を紹介し、さまざまな環境の違いとそれぞれの長所と短所についても説明しました。したがって、この記事で は、Windows、Linux、MacOSなどの他のシステムの環境設定については説明せず、Windows+WSLの構成についてのみ説明します。段階的に環境を構成し、ローカルLLMの運用を実現します。
目次
WSL2
1.WSL2について
WSL2は、2017年の初めにMicrosoftによって発売されたWSLのオリジナルバージョンのメジャーアップグレードです。WSL2は単なるバージョンアップグレードではなく、より高速でより汎用性が高く、本物のLinuxカーネルを使用します。一部のIT実務者を含め、今でもWSLの存在を知らない人は多いと思います。Linuxを使用する必要がある場合、彼らは依然としてWindows+VirtualMachineを使用し続けているかWindowsから切り替えてデュアルシステムモードを使用しています。
もちろん、一部のタスクには完全なLinux環境が必要であり、WSLでは置き換えられない可能性があることは否定できません。そのため、これらの方法に理由がないわけではありません。
2.WSL2を使用する理由
人工知能については、主にLinuxの強力なコマンドラインツールとGPUアクセラレーションコンピューティングを使用するため、デュアルシステムまたはWindows+VirtualMachinesの構成は少し肥大化しているように見えます。WSL2自体は、実際のLinux環境に近い完全なLinuxカーネルを備えており、WSL2はWindowsファイルシステムとシームレスにドッキングできます。Windowsでフォルダーを管理するのと同じように、ファイルシステムを管理できます。1秒もかからずに、WindowsからLinuxコマンドラインを実行できるようになります。したがって、Windows環境でLinuxの機能やツールを効率的かつ便利に使用したい場合は、WSL2を選択して後悔することはありません。
WSL2のインストール
1.インストール要件
1) WindowsのバージョンはWindows10バージョン2004以降(内部バージョン19041以降)またはWindows11であり、KB4566116更新プログラムがインストールされている必要があります。もちろん、バージョンが古い場合でも使用できますが、手動操作が必要です。これについては後で説明します。
2) WSL2では、Windowsの「仮想マシンプラットフォーム」機能を有効にする必要がある場合があります。なぜ「場合があります」と言っているのかと言うと、Windows10で有効にせずにインストールできるかどうかは実験していないためですが、私のコンピューター(Win11-22H2)では有効にせずにインストールすることもできます。したがって、インストールが失敗した場合は、「スタート」で「Windows機能」を検索し、次の図に示されているようにHyper-Vをオンにしてください。
3) ディスクには十分な予約スペース(おそらく少なくとも1G)があります。もちろん、これはすべてが正常に実行されるための基礎です。デフォルトではCドライブにインストールされますが、Cドライブの容量が心配な場合は、後述する他のパーティションに移行することもできます。
2.インストール
1) Linuxディストリビューションバージョンに対する要件がない場合(そのバージョンに特別な要件がある場合は、急いでコマンドを入力せずに、次の内容を参照してください)、管理者としてPowerShellを開いて「wsl --install」と入力するだけです。
2) Linuxディストリビューションのバージョンを指定する場合は、管理者としてPowerShellを開き、次のコマンドを実行して、Linuxディストリビューションのバージョンを指定する方法でWSL2をインストールします。
wsl --install -d <ディストリビューション名>(<ディストリビューション名>を、インストールするディストリビューションの名前に置き換えます。例:Ubuntu-20.04)。
さらに多くの選択肢が必要な場合は、wsl --list --online (またはwsl -l -oを利用)を使用して、利用可能なLinuxディストリビューションを表示できます。幸いなことに、Linuxの複数の異なるバージョンをインストールでき、実行時に切り替えるだけで済みます。
ヒント: 利用可能としてリストされていないLinuxディストリビューションをインストールする場合は、TARファイルを使用してLinuxディストリビューションをインポートできますが、ここでは説明しません。
3) サブシステムを実行するにはいくつかの方法があります。
- スタートメニューからディストリビューションを開く(デフォルトではUbuntu)
- WindowsコマンドプロンプトまたはPowerShellに「wsl」と直接入力し、Enterキーを押す
- WindowsコマンドプロンプトまたはPowerShellで、インストールされているディストリビューションの名前を入力する(例:ubuntu)
- 複数のバージョンのLinuxがインストールされている場合は、コマンド「wsl -l -v」を使用して関連情報を表示し、コマンド「wsl [name]」を使用して開始するバージョンを選択する(例:wsl ubuntu)
4) 初めて実行するときは、ユーザー名とパスワードを設定するように求めるプロンプトが表示されます。パスワードを入力してもパスワードは表示されず、カーソルも移動しないのでご注意ください。パスワードを覚えてEnterキーを押すだけです。管理者権限(sudo操作など)が必要な場合、システムはそれを入力するよう求めます。ただし、うっかり忘れてしまった場合でも、サブシステムを再インストールせずにこの問題を解決する方法があるので、ご心配なく。
5) サブシステムを終了したい場合は、コマンドラインに「exit」と入力するだけです。サブシステムが実行されているかどうかが不明な場合は、コマンドプロンプトまたはPowerShellで「wsl -l -v」を使用して関連情報を表示し、「wsl --shutdown」を使用してすべてのサブシステムをシャットダウンできます。
ヒント:グラフィカルサブシステムを使用したい場合は、Microsoftの公式Webサイトの関連コンテンツを参照して実装できますが、そうしないことを強くお勧めします。
構成
1.他のパーティションへの移行
システムディスクリソースが比較的不足している場合は、サブシステムを他のディスクまたはパーティションに移行することを検討できます。具体的な操作は以下の通りです。
1) WindowsコマンドプロンプトまたはPowerShellに「wsl -l -v --all」と入力して、移行する必要があるサブシステムを表示します。
2) WindowsコマンドプロンプトまたはPowerShellに「wsl --shutdown」と入力して、すべてのサブシステムが閉じられていることを確認します。
3) WindowsコマンドプロンプトまたはPowerShellに「wsl --export <サブシステム名><サブシステム圧縮パッケージを保存するパス>」と入力します(例:「wsl --export ubuntu f:\wsl-ubuntu.tar」)。
4) WindowsコマンドプロンプトまたはPowerShellに「wsl --unregister <サブシステム名>」と入力します(例:「wsl --unregister ubuntu」)。
5) WindowsコマンドプロンプトまたはPowerShellに「wsl --import <サブシステム名><移行サブシステムへのパス><元のエクスポートされたサブシステムの圧縮パッケージパス> --version2」と入力します(例:「wsl --import new_ubuntu F:\wsl\ubuntu_wsl f:\wsl-ubuntu.tar --version 2」)。
6) エクスポートされた元のサブシステム圧縮パッケージは削除することも、バックアップファイルとして使用することもできます。
注:サブシステムをバックアップする場合は、ここの内容を参照してください。
2.設定ファイルの設定
WSL2サブシステム構成ファイルには2種類あり、1つはWindowsのグローバル構成ファイル、もう1つはサブシステムのローカル構成ファイルです。主にグローバル構成ファイルを構成します。このファイルのパスは「C:\Users\<UserName>\.wslconfig」です。編集するにはテキストエディタで開く必要があります。設定する必要がある主なオプションは、メモリ、スワップ、およびスワップファイルです。設定する前に、サブシステムが閉じた状態であることを確認してください。これは非常に重要です。
- -memory:サブシステムに割り当てる最大メモリを構成します。
- -swap:WSL2VMに追加するスワップスペースの量。0はスワップファイルがないことを意味します。スワップストレージは、メモリ需要がハードウェアデバイスの制限を超えた場合に使用されるディスクベースのRAMです。
- -swapfile:スワップ仮想ハードディスクの絶対Windowsパス。このパスは、独自の状況に応じて設定でき、どこにでも設定できます。
構成ファイルのパスに直接移動し、メモ帳で開き、次の4行のコンテンツを追加します。最後に句読点がないことに注意してください。
[wsl2]
memory=8GB
swap=60GB
swapfile=G:\\wsl\\swap\\wsl-swap.vhdx
「G:\\wsl\\swap\\wsl-swap.vhdx」を独自のパスに置き換える必要があります。
注:ここで非常に重要な問題があります。LLMを実行するときは、メモリ+スワップ値がモデルサイズよりも大きくなるようにしてください。そうしないと、モデルの読み取り時に問題が発生します。
3.古いバージョンのWindows10へのWSL2のインストール
1) システムバージョンが1903以降、内部バージョンが18362.1049以降であることを確認してください。
2) 管理者としてPowerShellを開き、コマンド「dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart」を実行し、コンピューターを再起動します。
3) Linuxカーネルパッケージをダウンロードします。ダウンロードリンクは「https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi」です。
4) ダブルクリックしてダウンロードしたカーネルパッケージを実行し、インストールを完了します。
5) 管理者としてPowerShellを開き、コマンド「wsl --set-default-version 2」を実行します。
6) Microsoft Storeを開いて、好みのLinuxディストリビューションを選択し、アイコンをクリックしてインストールします。
図に示すように:
注:サブシステムを一定期間使用した後、領域(キャッシュなど)を解放するために不要になった一部のコンテンツをクリーンアップできます。コンテンツは削除されていますが、サブシステムの仮想ハードディスクが占有しているスペースは減少していないことがわかります。このとき、管理者権限でコマンドプロンプトまたはPowerShellを実行し、ディスクパートの仮想ハードディスク管理コマンド「vdisk」を使用して仮想ハードディスクを圧縮できます。
WSLの共通コマンド
使用法:wsl.exe [引数] [オプション...] [コマンドライン]
1.Linuxバイナリファイルを実行するための引数
コマンドラインが指定されていない場合、wsl.exeはデフォルトのシェルを起動します。
--exec、-e <コマンドライン>
デフォルトのLinuxシェルを使用せずに、指定されたコマンドを実行します。
--shell-type<タイプ>
指定されたシェルタイプを使用して、指定されたコマンドを実行します。
タイプ
- standard
デフォルトのLinuxシェルを使用して、指定されたコマンドを実行します。
- login
デフォルトのLinuxシェルをログインシェルとして使用して、指定されたコマンドを実行します。
- none
デフォルトのLinuxシェルを使用せずに、指定されたコマンドを実行します。
--
コマンドラインの残りの部分をそのまま渡します。
2.オプション
--cd <ディレクトリ>
指定したディレクトリを現在の作業ディレクトリとして設定します。
「~」を使用すると、Linuxユーザーのメインパスが使用されます。パスが文字で始まる場合、Linuxの絶対パスとして解釈されます。
それ以外の場合、この値はWindowsの絶対パスである必要があります。
--distribution、-d <ディストリビューション>
指定されたディストリビューションを実行します。
--user、-u <ユーザー名>
指定したユーザーとして実行します。
--system
システムディストリビューションのシェルを起動します。
3.Linux用Windowsサブシステムを管理するための引数
--help
使用状況情報を表示します。
--debug-shell
診断のためにWSL2デバッグシェルを開きます。
--event-viewer
Windowsイベントビューアのアプリケーションビューを開きます。
--install [ディストリビューション] [オプション...]
Linux用Windowsサブシステムのディストリビューションをインストールします。
利用可能なディストリビューションのリストを表示するには、「wsl.exe --list --online」を使用します。
オプション:
--no-launch、-n
インストール後にディストリビューションを開始しません。
--web-download
MicrosoftStoreではなくインターネットからダウンロード配布します。
--mount <ディスク>
すべてのWSL2ディストリビューションで物理ディスクまたは仮想ディスクを接続してマウントします。
オプション:
--vhd
<Disk> が仮想ハードディスクを表すことを指定します。
--bare
ディスクをWSL2に接続しますが、マウントはしません。
--name <名前>
マウントポイントのカスタム名を使用してディスクをマウントします。
--type <タイプ>
ディスクのマウント時に使用されるファイルシステムが指定されていない場合、デフォルトはext4になります。
--options <オプション>
その他の取り付けオプション。
--partition <インデックス>
マウントされるパーティションインデックスは、指定しない場合、デフォルトでディスク全体になります。
--release-notes
Webブラウザを開いて、WSLリリースノートページを表示します。
--set-default-version <バージョン>
新しいディストリビューションのデフォルトのインストールバージョンを変更します。
--shutdown
実行中のすべてのディストリビューションとWSL2軽量仮想マシンをただちに終了します。
--status
Linux用Windowsサブシステムのステータスを表示します。
--unmount [ディスク]
すべてのWSL2ディストリビューションからディスクをアンマウントして切り離します。引数なしで呼び出された場合は、すべてのディスクをアンマウントして切断します。
--update
Linux用Windowsサブシステムのパッケージを更新します。
オプション:
--web-download
MicrosoftStoreではなくインターネットからアップデートをダウンロードします。
--pre-release
利用可能な場合はプレリリースバージョンをダウンロードします。--web-downloadの使用を示します。
--version、-v
バージョン情報を表示します。
4.Windows Subsystem for Linuxでディストリビューションを管理するための引数
--export <ディストリビューション><ファイル名> [オプション]
ディストリビューションをtarファイルとしてエクスポートします。
標準出力の場合、ファイル名は「-」にすることができます。
オプション:
--vhd
.vhdxファイルとしてエクスポートするディストリビューションを指定します。
--import <ディストリビューション> <インストール場所> <ファイル名> [オプション]
指定されたtarを新しいディストリビューションとしてインポートします。標準入力の場合、ファイル名は「-」にすることができます。
オプション:
--version <バージョン>
新規ディストリビューションに使用するバージョンを指定します。
--vhd
提供されるファイルがtarファイルではなく.vhdxファイルであることを指定します。
この操作により、指定されたインストール場所に.vhdxファイルのコピーが生成されます。
--import-in-place <ディストリビューション> <ファイル名>
指定した.vhdxを新しいディストリビューションとしてインポートします。
この仮想ハードディスクは、ext4ファイルシステムタイプでフォーマットされている必要があります。
--list、-l [オプション]
ディストリビューションをリストします。
オプション:
--all
現在インストール中またはアンインストール中のものも含め、すべてのディストリビューションをリストします。
--running
現在実行中のディストリビューションのみをリストします。
--quiet、-q
ディストリビューション名のみを表示します。
--verbose、-v
すべてのディストリビューションに関する詳細情報を表示します。
--online、-o
「wsl.exe –install」を使用して、インストール可能なディストリビューションのリストを表示します。
--set-default、-s <ディストリビューション>
ディストリビューションをデフォルトのディストリビューションとして設定します。
--set-version <ディストリビューション> <バージョン>
指定したディストリビューションのバージョンを変更します。
--terminate、-t <ディストリビューション>
指定されたディストリビューションを終了します。
--unregister <ディストリビューション>
ディストリビューションの登録を解除し、ルートファイルシステムを削除します。
ソフトウェア構成
次に、環境管理ソフトウェア、コード編集ソフトウェアなどの関連ソフトウェアをWSLに展開し、WSL2でLLMを実行する方法を示す例を示します。
1.Pythonライブラリ管理
Pythonライブラリの管理には主にminicondaを使用します。
- まず、WSLコマンドラインを起動し、コマンドラインに「wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh」と入力します。
- ダウンロードが完了したら、「sudo chmod 777 Miniconda3-latest-Linux-x86_64.sh」でこのファイルに高い権限を与える必要があります。このとき、パスワードの入力を求めるプロンプトが表示されます。このパスワードはWSL2を作成するときに入力したパスワードです。
- コマンドラインに「./Miniconda3-latest-Linux-x86_64.sh」と入力します。インストールが完了すると、図に示すように、コマンドラインのフロントエンドにさらに(ベース)ワードが追加されます。
2.コードエディタ
- Windows環境にPycharmやvscodeなどのコードエディタを既にインストールしている場合は、設定からWSL2のPython環境を見つけることができます。
- そうでない場合は、「code」と入力するだけです。WSL2コマンドプロンプトで、自動的にインストールされるまで待ちます。vscodeが直接起動されます。開始すると、左下隅にWSLという単語が表示されます。これは図に示すようにvscodeがWSLに接続されていることを示します。

ヒント:wsl2サブシステムのコマンドラインで、cdコマンドを使用して、コードを編集する必要がある場所に直接移動し、「code」を実行します。vscodeを直接起動してそのフォルダーを見つけます。これは非常に便利です。
3.GPU高速化推論
ここでは、NVIDIAのグラフィックスカードのアクセラレーションについてのみ説明します。他のカードを使用する場合は、関連する設定方法を検索してください。一つ一つ列挙することはしません。
1) Dockerを使用したNVIDIACUDAアクセラレーションのセットアップ
- Dockerサポートをインストールします。コマンドラインで「curl https://get.docker.com | sh」を実行します。その後、「sudo service docker start」を実行します。これにより、Dockerサービスが開始されます。
- NVIDIAコンテナツールキットの安定したリポジトリをセットアップします。コマンドラインで次のコマンドを順番に実行します。
- distribution=$(. /etc/os-release;echo $ID$VERSION_ID);
- curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg;
- curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-docker.list.
- NVIDIAランタイムパッケージと依存関係をインストールします。コマンドラインで次のコマンドを順番に実行します。ssudo apt-get update; sudo apt-get install -y nvidia-docker2
- コンテナを起動します。コマンドラインで「docker run --gpus all -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/tensorflow:20.03-tf2-py3」を実行します。完了したら、CUDAアクセラレーション機能を備えたDockerコンテナに入ります。図に示すように:
2) NVIDIA CUDAアクセラレーションの手動インストール
- -インストールパッケージを取得します。コマンドラインで「wget https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run」を実行します。
- -インストールパッケージを実行します。コマンドラインで「sudo sh cuda_12.2.2_535.104.05_linux.run」を実行します。エラーがある場合は、コマンドに「--override」を追加します(例:sudo sh cuda_12.2.2_535.104.05_linux.run --override)。
- -対応する環境変数を追加します。コマンドラインで「sudo vim ~/.bashrc」を実行し、ファイルの末尾に次の内容を追加します。
```
export PATH=/usr/local/cuda-12.2.2/bin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/usr/local/cuda-12.2.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} export CUDA_HOME=/usr/local/cuda-12.2.2${CUDA_HOME:+:${CUDA_HOME}}```
- -環境変数を更新します。コマンドラインで「source ~/.bashrc」を実行します。
注:「sudo vim ~/.bashrc」を実行してvimに慣れていない場合は、このファイルを見つけてWindows環境にコピーし、テキストエディタを使用して関連するコンテンツを編集および追加し、それをコピーすることもできます。編集が完了したら元に戻ります。これをおこなう利点は、「.bashrc」もバックアップされることです。
4.LLMの実行
1) conda仮想環境を作成します。コマンドラインに「conda create -n llm python=3.10」と入力します。
注:
- 「llm」は作成する仮想環境の名前で、任意に変更できます。
- 「-python=3.10」は、仮想環境で使用されるPythonのバージョンを指定します。「conda create -n llm」も可能ですが、バージョンを指定することを強くお勧めします。
2) 仮想環境に切り替えます。コマンドラインに「conda activate llm」と入力して、仮想環境をアクティブ化します。
コマンドプロンプトのフロントエンドの「(base)」が「(llm)」に切り替わります。仮想環境を終了したい場合は、「conda deactivate」を使用します。
3) huggingface (https://huggingface.co)から使用するLLMを見つけます。
モデルが多すぎるため、https://huggingface.co/spaces/HuggingFaceH4/open_llm_leaderboardでオープンソースモデルのランキングを参照できます。llama.cppでサポートされている形式を使用することをお勧めします。お住まいの国(地域)からhuggingfaceにアクセスできない場合は、魔法を使って魔法を打ち負かしてください。
4) モデルをダウンロードします。まず、gitの大きなファイルのサポートを有効にする必要があります。コマンドラインに「git lfs install」と入力します。
実行後、「git clone https://huggingface.co/<ライブラリ名>」と入力し、「<ライブラリ名>」をダウンロードするモデルの名前に置き換えます。例:「git clone https://huggingface.co/Phind/Phind-CodeLlama-34B-v2」。ダウンロードが完了するまで待ちます。
5) llama.cppのPythonバージョンllama-cpp-pythonをインストールします。コマンドラインに「CMAKE_ARGS="-DLLAMA_CUBLAS=on" pip install llama-cpp-python」と入力し、インストールが完了するまで待ちます。インストール後、llama.cppはCPUとGPU推論の両方をサポートします(もちろん、他のブランドのグラフィックスカードのアクセラレーションもサポートします。https://github.com/abetlen/llama-cpp-pythonを参照してください)。
注: グラフィックスカードをお持ちでない場合、またはGPUアクセラレーションサポートをインストールしていない場合は、「pip install llama-cpp-python」を使用してインストールしてください。インターフェイスは遅くなりますが、使えないわけではありません。
6) インターフェイスを実行します。pyファイルを作成し、test.pyという名前を付けます。次の内容をファイルにコピーします。
from llama_cpp import Llama
llm = Llama(model_path="./models/7B/llama-model.gguf")
output = llm("Q:太陽系の惑星に名前を付けますか?A: ", max_tokens=32, stop=["Q:", "\n"], echo=True)
print(output)
次に、コマンドラインで「python test.py」を実行すると、出力が表示されます。
{ "id": "cmpl-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "object": "text_completion", "created": 1679561337, "model": "./models/7B/llama-model.gguf", "choices": [ { "text": "Q: Name the planets in the solar system? A: Mercury, Venus, Earth, Mars, Jupiter, Saturn, Uranus, Neptune and Pluto.", "index": 0, "logprobs": None, "finish_reason": "stop" } ], "usage": { "prompt_tokens": 14, "completion_tokens": 28, "total_tokens": 42 } }
注:
1.「model_path」はモデルファイルをダウンロードした場所です。
2.「Q:太陽系の惑星に名前を付けますか?A:」のQ以降の内容は尋ねたい質問です。任意の質問に変更できます。
3.「Q:太陽系の惑星に名前を付けますか?A:」のA以降の内容は、LLMからの答えです。
結論
この記事では、LLMを実行できるWSL2環境を作成する方法を段階的に説明し、使用中のWSL2のさまざまな詳細について詳しく説明しました。次に、最小限のコードでLLM推論を実行する簡単な例を紹介しました。また、llama.cppのシンプルさと強力さも体験していただけたと思います。次の記事では、アルゴリズム取引に統合するという目的に適応するために、多くのLLMから適切なモデルを選択する方法について説明します。
ご期待ください。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/13496





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索