究極のローコスト16GB GPU、AMD Ryzen 5600GでAIソフト実行

 AMD Ryzen 5600G APUを16GB VRAMのGPUとして使って、LLM(大規模言語モデル)Llama2/vicunaやStableDiffusion(SD)を実行する方法。
AMDのROCmオープン・ソフトウエア・プラットフォームはNvidia CUDA互換でPytorchでも使えるが、AMDは公式にはRyzen 5600G APUの対応は言及してない。
ところがやり方次第で、5600Gを16GB VRAM内蔵のGPUとして使用できる。
16GB VRAM内蔵のグラボはそこそこ高価だが、5600Gは現在16,000円程度で買えるので、ローコスト、ローパワーの、ハイパフォーマンスグラボになる。
Pytorchは現在の最新版で動作。
実際にLlama2/vicuna  v1.5やSDで試すと、CPUの倍以上のスピードで実行した。

動作環境
マザーボード ASROCK B450M Pro4 BIOS 8.01
CPU AMD Ryzen 5 5600G
CPUメモリ 48GB
OS Ubuntu 22.04
Pytorch 2.0.1  ROCm 5.4.2

5600GはCPUとGPUでメモリを共有しているので、CPUのメモリを割り当ててGPUのVRAMメモリを増やす。
まずはBIOSで16GB VRAMを手動で割付
各社、マザーボードによって設定の違いがあっても、同じことができればよい。
CPUメモリが32GB以上必要だが、この設定が出来なければ無理。諦めるしかないかも。

Ubuntuを起動してVRAM確認

[ 4.209478] [drm] amdgpu: 16384M of VRAM memory ready
VRAMが16GB割り当てられている。

これで準備OK。
CPUが使用できるメモリは16GB減るので、十分なメモリが必要。

AMDGPUのインストール
AMDのサイトからamdgpu-install_5.5.50503-1_all.debドライバーをダウンロードしてインストールする。

sudo dpkg -i amdgpu-install_5.5.50503-1_all.deb
amdgpu-install --usecase=rocm

 

うまく行ったら再起動。

/dev/kfdのパーミッション設定

sudo usermod -aG render $USER

 

rocminfoでROCmの確認

rocminfo



Agent 2のgfx90cが5600G互換のGPUボードになる 

最初にFastChat Vicuna v1.5 based on Llama2 LLMを使ってみる。

cd ~
git clone https://github.com/lm-sys/FastChat

 vicuna-7b-v1.5-16kの全部のファイルをダウンロードしてローカルフォルダにクローンする。

mkdir ~/LLM/vicuna-7b-v1.5-16k

このフォルダにクローンして、次回以降のネットアクセスを削減する。

ROCm対応Pytorchのインストール

python3 -m pip  install -U pip wheel
pip install -U diffusers transformers scipy ftfy
pip uninstall torch
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/rocm5.4.2
sudo apt install libstdc++-12-dev

最後の行はstable-diffusion-webuiのビルドに必要。

いよいよLlama2/vicunaを使ってみる。
16GB VRAMではvicuna-13bはフルには使えないので、今回はvicuna-7b-v1.5-16kにした。
70億パラメータで、最大1.6万トークンまで使えるので、原稿用紙100枚分程度の文章を生成できる。

cd ~/FastChat
export HSA_OVERRIDE_GFX_VERSION=9.0.0
python3 -m fastchat.serve.cli --style rich --model-path ~/LLM/vicuna-7b-v1.5-16k --max-new-tokens 2048 --temperature=0.8 --repetition_penalty 1.1

 

HSA_OVERRIDE_GFX_VERSION
の環境設定は5600Gのgfx90c互換APIの設定。
--temperatureと--repetition_penaltyの引数設定は、Llama 2が長文での繰り返しが多くなるので、微調整した。

CPU-Xで観測すると14GB程度のVRAMと40W程度の電力を使用する。
専用の16GB VRAMのグラボは最大200W程度なので、かなり低消費電力だが比較すると速度は遅い。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
USER:
あなたは誰ですか。

ASSISTANT:
私はGPT-4という名前のAIモデルです。私は2021年に開発されました。私は、自然言語処理、自然言語生成、知識検索、質問回答、文章生成、翻訳など、多くのAIタスクにおい を持っています。私は、Google、Meta、Amazon、およびDeepMindの各社が開発したモデルの一部です。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

USER:
AIの危険性について、箇条書きにして説明してください。

ASSISTANT:
以下はAIの危険性に関する箇条書きです:
1 利用者のプライバシーやデータの権利を侵害する可能性があります。AIは大量のデータを学習し、それを元に人々の行動や習慣を分析し、可能な 限り正確な予測を行います。しかし、このプロセス中にプライバシーやデータの権利を侵害する可能性があります。
2 自主的な意思決定力や判断力がないため、不正や悪意のある使用を助長する可能性があります。AIは指示に従って行動し、情報を解釈するため、そ れが正しいかどうかを判断する能力がありません。
3 エピッドヘルスなリスクがあります。AIが生成した結果が偽物や誤った情報である場合、重要な医療決定や治療に影響する可能性があります。
4 就業市場への影響があります。AI技術が進化すると、一部の職種が自動化され、失業率の上昇や職場の変容を引き起こす可能性があります。
5 デザインバイアスが存在する可能性があります。AIが学習したデータが偏っていたり、差別的な内容を含んでいた場合、結果的にバイアスを持つこ とがあります。
6 AIの使用による社会的・心理的影響が懸念されています。例えば、AIによる予測が個人の人格やモチベーションに与える影響や、AIに依存しすぎ ることで人間関係や自分自身の独立性が喪失する可能性があります。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
USER:
少し長めの恋愛小説の例を見せてください。

ASSISTANT:
以下は、全体的に長い恋愛小説の例です: ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
サラは、クリスマス前夜に友人から無言で贈られた、美しいブレスレットを首に巻いていました。彼女はこのブレスレットを着用することができず、 常にポケットに入れていました。
その日、サラは会社の組み事として、同僚であるダグラスの家を訪ねました。そこで、彼女はアンジェラを出会いました。アンジェラは、ダグラスの 親友であり、彼女が最初に会った時よりも風通しの良い女性でした。アンジェラは、サラの服装や手袋に注目し、彼女が何か秘密を持っているのでは ないかと疑問に思いました。
サラは、アンジェラに話を聞かれ、ブレスレットの存在を告白しました。アンジェラは、このブレスレットが幸運の符と伝えられており、着用するこ とで何か特別なことが起こると信じていると語りました。サラは、この話に興味を持ち、ブレスレットをアンジェラに譲ることに決めました。
その後数週間、サラは何か特別なことが起こらないことに気付きました。彼女は、アンジェラの言葉を実証することができませんでした。その時、彼 女は街角で、再びアンジェラと鉢合わせることになりました。
「あなたがブレスレットを着用していないと何か起こらない」とアンジェラが言いました。
サラは、アンジェラの言葉を思い出し、ブレスレットを脱がしました。そして、すぐに彼女が知っていたように、多くの幸運の素晴らしい出来事が起 こりました。これらの出来事が、アンジェラの言葉を信じ始めるきっかけとなり、そしてこれからのサラの人生に深い影響を与えることになります。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
最後に少し難しそうな質問。
-------------------------------------------------------------------------------------------------------------------
USER:
クマが海辺に行ってアザラシと友達になり、最終的には家に帰るというプロットの短編小説を書いてください。
ASSISTANT:
タイトル:「海辺の友達」
ある日、森の中で楽しそうに遊んでいたクマは、不思議な音がする。それは海まで聞こえてきた。クマはその音に興味津々で 、周りから離れて海へ向かった。
やがてクマは見事に海に到着し、そこにはアザラシがいた。2匹目が見る前に一方的に接近してしまったクマ。しかし、アザラ シは友好的な態度で物証し、お互いに興味深く話し始めた。
海の上での交流の後、クマはアザラシに海辺での楽しみを教え、アザラシもクマに同行して海辺で過ごすことを提案した。3体 は新しい友達となり、二人三人で楽しい時間を過ごすことができた。
時間が過ぎ、太陽が沈む頃、3匹は自分たちの家へ帰ることにした。その道中で、クマはアザラシに自分たちの生活や故郷に ついて語り、アザラシも自分たちの生活や故郷について語った。
3匹はお互いに新しいことを学び、楽しい時間を過ごし、再び集うことを楽しみにして、別れの時が来た。
そして、クマ、アザラシ、そしてアシカは、お互いの存在と出会い、新しい友情を築いた。
------------------------------------------------------------------------------------------------------------------
日本語が少し微妙なところがあるが、いい短編だ。
2匹目のアザラシはアシカだったのかな。

Llama 2/vicunaは日本語に特化したチューニングは行ってないはずなのに、かなり日本語のレベルは高い。
以前Vicunaの開発者たちと日本語を含む不具合についてやり取りしていたら、日本語は公式にはサポートしてないと言われたのを思い出した。
更に日本語でファインチューニングを行ってみるのも面白いかもしれない。
5600G のVRAM16GB版で実行すると、適度に遅いので、LLMが確率的に文字を選んでいる様子がわかるので面白い。
LLMは本質的にstochastic parrotでオオムが確率論的に喋っているのと同じだとの比喩があるが、そうかもしれない。

stable-diffusion-webuiも試したが、仮想環境の作成が必要になる。
python -m venv stablediffusion
その他はだいたい同じ方法でいける。
ちなみにタイトルの画像は同じ環境でstable-diffusion-webuiを使って約1分で生成できた。
詳細説明は、また後日にしたい。

 

コメント powered by CComment