AMDでローカルLLMをやってみた。

仕事で使っていたAMDのグラフィックカードですが、M2チップのMacになったので使わなくなった。そこで、ローカルLLMをやってみることに。

生成AIでいろいろできるようですが、デザインの仕事では、まだまだ導入する意味はあまりない。なので課金するほどには使っていない。しかし、趣味の部分ではChat GPTの無課金部分には、だいぶお世話になっている。書類を添付し、その内容を回答してもらうとか非常に便利だ。仕事でもPDFの添付とかしたくなるのですが、仕事上知り得た情報を外部のWEBアプリにアップするのは流石にね。そこで、そういったことを解決するために、ローカルLLMを組んでみることに。

まず、AMDのグラフィックカードでLLMをやるには、ROCm対応していることがほぼ必須。ROCmとは、Radeon Open Computeのことで、AMD製GPUで機械学習や高速計算を行うためのオープンソースのGPU計算プラットフォーム。

ROCmに対応しているGPUは以下にある。

私の場合は、Radeon RX Vega 64なので、対応していない?って感じでしたが、gfx900というアーキテクチャではあるので、AMD Instinctにgfx900があるのでやってみたら、無事認識した。インストールには下記のページを参考にした。使っていないPCケースにグラフィックカードを入れ、CPUは3万円ぐらいのものを新調した。OSはUbuntu 22.04 LTS Server。

ただ、Perform MOK managementというセキュアブート画面が出てきてどうすればいいのかわからなくて、手こずりましたが。

以下の通りに認識した。Agent2がRadeon RX Vega 64です。

$ rocminfo
ROCk module version 6.10.5 is loaded
=====================    
HSA System Attributes    
=====================    
Runtime Version:         1.14
System Timestamp Freq.:  1000.000000MHz
Machine Model:           LARGE                              
System Endianness:       LITTLE                             
DMAbuf Support:          YES
==========               
HSA Agents               
==========               
*******                  
Agent 1                  
*******                  
Name: AMD Ryzen 7 5700X 8-Core Processor
Device Type: CPU
Compute Unit: 16
Max Clock Freq: 3400 MHz
*******                  
Agent 2                  
*******                  
Name: gfx900
Marketing Name: Radeon RX Vega
Device Type: GPU
Compute Unit: 64
Max Clock Freq: 1663 MHz
Fast F16 Operation: TRUE

次に、Ollama(オラマ)という、LLMをローカル環境で利用できるオープンソースのツールをインストールします。Llama3を動かしてみたところサクサク動く。

ということで、次にOpen WebUIを使って、LAN内のMacから接続して、Chat GPTのような使い方をする方法を試します。Open WebUをDocker Composeで動かします。

公式はDocker Composeを使う方法ではないのですが、ChatGPTがCUDAじゃないので、公式の方法ではないと言いはるのでDocker Composeでやりました。

しかし、docker-compose.ymlの書き方でかなり手こずった。ローカルの別のマシンからのアクセスもなかなか大変だった。

何とかブラウザからUbuntuサーバーへ接続して(http://192.168.10.60:8080)、チャットができるようになりました。

次に、添付ファイルを読み込ませようとしたが、どうもうまく行かない。これもdocker-compose.ymlの記述で、添付ファイルも扱えるようになった。しかし、想像していたほどの能力が無い。コピペできる程度のテキストファイルしか認識できていない。

せっかく、ここまで動くようになったのに、ちょっとがっかり。さて、どうしたものか・・・。