今回は、主に機械学習で使うNVIDIAのGPUを使えるチャンスがあったので、ちょっと話題になった言語モデルMPT-7Bを試してみました。
一応使うことができたので構築方法を記しておきます。
CUDA環境をWindowsに構築するという記事としても参考になるかと思います。。。
MPT-7B用のマシンを構築
今回は物理マシンにそのままMPT-7Bを導入するのではなく、Hyper-V仮想マシンにGPUをパススルーさせて動かしました。
でも構築方法は物理マシンでもほぼ変わらないと思いますので参考になれば幸いです。
ドライバーのインストール
まずドライバーをインストールします。
www.nvidia.com
NVIDIAのドライバページに進み、使うGPUにあったドライバーをダウンロードします。
今回はこのドライバーをダウンロードしました。
CUDA Toolkitのダウンロード
CUDA Toolkitをダウンロードします。これは12.1.1をダウンロードしました。
理由は後述のPytorchがCUDA12.1.xまでしか対応していないからです。
インストールと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を使ってみたのでそちらの記事もよろしくお願いします。