WindowsでLLMの動作環境を構築した(MBT-7b)

AI関連

今回は、主に機械学習で使うNVIDIAのスーパーGPUを使えるチャンスがあったので、ちょっと話題になった言語モデルMPT-7Bを試してみました。
一応使うことができたので構築方法を記しておきます。
CUDA環境をWindowsに構築するという記事としても参考になるかと思います。。。

MPT-7B用のマシンを構築

今回は物理マシンにそのままMPT-7Bを導入するのではなく、Hyper-V仮想マシンにGPUをパススルーさせて動かしました。
でも構築方法は物理マシンでもほぼ変わらないと思いますので参考になれば幸いです。

ドライバーのインストール

まずドライバーをインストールします。
www.nvidia.com

NVIDIAのドライバページに進み、使うGPUにあったドライバーをダウンロードします。

今回はこのドライバーをダウンロードしました。

CUDA Toolkitのダウンロード

developer.nvidia.com

CUDA Toolkitをダウンロードします。これは12.1.1をダウンロードしました。
理由は後述のPytorchがCUDA12.1.xまでしか対応していないからです。

cuDNNのダウンロード

developer.nvidia.com

cuDNNのダウンロードは会員登録がいります。
会員登録したらCUDA12.x用をダウンロードします。

Pythonのダウンロード

www.python.org

Pythonは3.11.4をダウンロードしました。とくに理由はありませんが安定版で最新だったのでこれにしました。

インストールとPATHを通す

NVIDIAドライバ → CUDA → Pythonの順にインストールしていきます。特にオプションはなく次へを押していくだけです。
cuDNNはインストーラーではないので解凍してお好みのところに置いておきます。

次にPATHを通していきます。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\libnvvp
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\extras\CUPTI\lib64
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1\include
C:\nvidia\cuda\cudnn\bin

こんな感じでPATHを通しました。一番下のやつはcuDNNです。お好みの場所に設置されたと思うので中身のbinフォルダをターゲットにして通してください。

pytorchとtransformersのインストール

pytorch.org
pytorchのサイトでバージョンを指定するとpipやcondaコマンドが表示されるのでインストールできます。

僕の場合はcmdで以下を入力してインストールしました

pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121

Transformersはバージョン指定なくインストールしました。入れているのは4.30.2です。

pip3 install transformers

これで構築は完了です。

インストール確認

nvidia-smiコマンドやnvcc -VでドライバやCUDAが入っているか確認できます。

また、pythonで以下を入力してpytorchがCUDAを使えるか確認します。

import torch
print(torch.cuda.is_available())

Trueが返ってきたらOKです。

MPT-7Bを動かしてみる

準備ができたので実際にMPT-7Bを動かしてみます。
動かし方がわからなかったので以下の記事を参考にさせていただきました。
note.com

import torch
import transformers
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained(
"mosaicml/mpt-7b-chat"
)
model = AutoModelForCausalLM.from_pretrained(
"mosaicml/mpt-7b-chat",
torch_dtype=torch.float16,
trust_remote_code=True
).to("cuda:0")
#ここにプロンプトを入れる
prompt = "<human>: What is Windows Server?\n<bot>:"
inputs = tokenizer(prompt, return_tensors='pt').to(model.device)
input_length = inputs.input_ids.shape[1]
outputs = model.generate(
**inputs,
max_new_tokens=128,
do_sample=True,
temperature=0.7,
top_p=0.7,
top_k=50,
return_dict_in_generate=True
)
token = outputs.sequences[0, input_length:]
output_str = tokenizer.decode(token)
print("output :", output_str)

プロンプトを書くところまではMPT-7Bの呼び出しでプロンプト以降はどのように返すか等の設定になっていると思われます。
初回はMPT-7Bのダウンロードがあるのでかなり長いです。起動も長いです。気長に待ちます。

回答が返ってきました、こちらになります

す、、、すごい、、、でも
Windows Server is a type of operating system used for servers. It is a version of the Windows operating system designed for use on servers.
ここどっちかだけでいいですね、、、でも機能の説明は間違ってないのですごいと思います

今回はMPT-7BをWindowsで使ってみる実験でした。環境構築もそれほど苦ではないので性能が良いGPUを持っている方はぜひお試しを!!

Falcon-40Bなどの他のLLMを使ってみたのでこちらの記事もよろしくお願いします。

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