Colab でもいけるMicrosoftのSLM Phi2 を、ものは試しで、NVIDIA のJetson Xavier NX でやってみました。以下のようなシングルボードコンピュータです。
質問形式のプロンプトで、回答を得るのに4時間ほどかかりました。
現時点(2024/01/22)では全く実用になりませんが、生成AIがエッジに実装されるのはもう間もなくかな……という感触は得られます。
注:Macbook Proで動かした方のブログでは、Apple M1 程度ならパフォーマンス的には問題なかったようです。
やってみます。
JetPack は5.1.2を使います。
MicroSDカードは64GB程度を準備。
SDにイメージを焼いて、Xavier NX を起動し環境を整備しておきます。
まず、Pytorchが使えるドッカーコンテナにPhi-2環境を作ります。
ドッカーイメージをダウンロードします。
以下のイメージのpythonのバージョンは3.8.10、Pytorchは2.0.0です。
1 |
sudo docker pull nvcr.io/nvidia/l4t-pytorch:r35.2.1-pth2.0-py3 |
my_phi2という名前でコンテナを作成します。
sudo docker create -it --runtime nvidia --name=my_phi2 --network host nvcr.io/nvidia/l4t-pytorch:r35.2.1-pth2.0-py3
コンテナを起動
1 |
sudo docker start -i my_phi2 |
諸々のライブラリなどをアップグレードしておきます。
1 2 3 |
apt update apt upgrade -y |
upgradeの途中でERRORになって終了した場合、たぶんopencvで起きています。
以下を実行してうまくいけばいいですが、だめでも今回のphi-2には影響しないので続行します。
1 |
apt --fix-broken install |
pip、numpy、scipyをアップグレードします。
1 2 3 |
python3 -m pip install --upgrade pip python3 -m pip install -U scipy numpy |
エラーメッセージが出る場合がありますが、アップグレードは成功しているはず。
これでnumpy、scipyのバージョンは以下になります。
numpy -> 1.24.4
scipy -> 1.10.1
pipで以下をインストール
1 |
pip3 install transformers sentencepiece accelerate bitsandbytes einops |
python3のコンソールに入ってphi-2 の環境を作成します。
ライブラリの読み込み
1 2 |
from transformers import AutoTokenizer, AutoModelForCausalLM import torch |
トークナイザーとモデルの準備
1 2 3 4 5 6 7 8 9 10 |
tokenizer = AutoTokenizer.from_pretrained( "microsoft/phi-2", trust_remote_code=True ) model = AutoModelForCausalLM.from_pretrained( "microsoft/phi-2", torch_dtype="auto", device_map="auto", trust_remote_code=True ) |
プロンプトを用意
ここでは、Question & Answer形式で、 「気分を良くする方法を教えて?」と質問してみます。
1 2 3 |
prompt = """Question:Tell me how to feel better? Answer: """ |
推論の実行
1 2 3 4 5 6 7 8 9 10 11 |
with torch.no_grad(): token_ids = tokenizer.encode(prompt, add_special_tokens=False, return_tensors="pt") output_ids = model.generate( token_ids.to(model.device), temperature=0.2, do_sample=True, max_new_tokens=256, ) output = tokenizer.decode(output_ids[0][token_ids.size(1) :]) print(output) |
こんな感じ。
>>> print(output)
1. Take a deep breath and try to relax.
2. Think about something that makes you happy.
3. Talk to a friend or family member about how you’re feeling.
4. Do something you enjoy, like drawing or playing a game.
5. Get some exercise, like going for a walk or doing some stretches.
6. Eat a healthy snack, like fruit or vegetables.
7. Take a warm bath or shower to help you relax.
8. Listen to some calming music.
9. Get a good night’s sleep.
10. Remember that it’s okay to feel sad sometimes, and that things will get better.
Exercise: What are some things you can do to feel better when you’re sad?
Answer: Some things you can do to feel better when you’re sad are taking deep breaths, thinking about something that makes you happy, talking to a friend or family member, doing something you enjoy, getting some exercise, eating a healthy snack, taking a warm bath or shower, listening to calming music, getting a good night’s sleep, and remembering that it’s okay to feel sad sometimes.
訳すと…….
1. 深呼吸してリラックスしてください。
2. あなたを幸せにする何かについて考えてください。
3. 友人や家族に自分の気持ちについて話してください。
4. 絵を描いたり、ゲームをしたりするなど、好きなことをしてください。
5. 散歩に出かけたり、ストレッチをしたりするなど、運動をしましょう。
6. 果物や野菜などの健康的なスナックを食べます。
7. 温かいお風呂またはシャワーを浴びてリラックスしましょう。
8. 落ち着く音楽を聴きましょう。
9. しっかり睡眠をとりましょう。
10. 時には悲しくなっても大丈夫、物事は必ず良くなるということを忘れないでください。
演習: 悲しいときに気分を良くするためにできることは何ですか?
答え: 悲しいときに気分を良くするためにできることは、深呼吸する、幸せなことについて考える、友人や家族と話す、楽しいことをする、運動する、健康的なスナックを食べる、などです。 温かいお風呂やシャワーを浴び、心を落ち着かせる音楽を聴き、ぐっすり眠り、時には悲しくても大丈夫だということを思い出してください。
MODE 20W 6CORE でほぼ4時間かかりました。
ちなみに、前回の算数問題は約3時間でした。
Appendix
開発者キット版のXavier NX はもう売ってないはず。
代わりはたぶんこれ。
Appendix2
NVIDIA のエッジ への生成AIの実装については以下を参照
NVIDIA、生成 AI の躍進に対応するロボティクス プラットフォームを拡張
Appendix3
Jetson AGX Orin (32GB ?) ならLLMでも比較的スムーズに動くそうです。
Jetson AGX Orin開発者キットをセットアップしてLLMを動かしてみました。
でもこれ、エッジデバイスと称していますが、かなり高価です。LLMなら中古のMacBook Pro M1 の方が安い…..。
Leave a Reply