ラズパイ5にGPUを外付けしてローカルでLLMを動かしてみる(LLM編)


前回ラズパイ5にAMDのGPUを外付けしてみました。

今回はこれを使ってICHIKENさんのブログをベースに、ローカルでLLMを動かす環境を作ってみます。

LLMを動かすツールはLM Studio やOllama、llama.cppなどいくつかあります。

またGPUをよしなにAPI制御するライブラリにNVIDIAではCUDA、AMDではROCmがあります。

ただAMDのGPUをラズパイのARMアーキテクチャ上で制御するのにROCmは対応していませんが、VulkanならAMD GPUやARMに対応していて、llama.cppがツールとして使えます。

Vulkanは、Khronos Groupが策定した、無料の次世代オープンソース・グラフィックスAPIです。CPUの負荷を抑えつつ、GPU(グラフィックス機能)の性能を最大限に引き出せるため、PCゲームやAndroidアプリなどで高速・高画質な描画を実現し、消費電力の削減にも寄与します。

 

ラズパイ+ AMDの環境にVulkan SDK を導入してVulkanをターゲットにllama.cppをビルドしてみます。

ラズパイ5はこんな感じになります。

ハード:ARM CPU + AMD GPU (8GB) + SSD(128GB)

ソフト:Bookworm (64-bit) + Vulkan + llama.cpp + 量子化LLM


Vulkan SDK

このサイトからラズパイ用にSDKをダウンロードしておきます。

最新版は1.4.341.1 です。

 

 

 

 

 

 

 

 

 

1.4.341.1を対象に設定していきます。

以下でもダウンロードできます。

必要なパッケージなどをインストールしておきます。

 

インストール用フォルダー(vulkan)を作っておきます。

ダウンロードしておいたものを解凍します。解凍中は何も表示されませんが問題ないです。

ヘッダーファイルをコピー

sourceコマンドを使用して、セットアップスクリプトを現在のシェルに読み込みます。

 


llama.cpp

llama.cppをクローン

必要なパッケージなどをインストール

vulkan ターゲットでllama.cppをビルド

 


量子化LLM

いくつかの量子化されたモデルをHugging Faceからダウンロードして使ってみます。

DeepSeek-R1-Distill-Qwen-7B-Q4_K_M

中華製DeepSeek-R1 7Bを蒸留して4-bit で量子化したモデル

 

日本語対応LLM3種+1

Mistral-Nemo-Japanese-Instruct-2408-Q4_K_M

Mistral AI 社が開発したMistral-Nemo の、CyberAgent社による日本語ファインチューニング済み、13Bサイズ、Q4KM量子化モデル

Llama-3-ELYZA-JP-8B

ELYZA社が開発した日本語に特化した大規模言語モデル。Meta社の「Llama 3」シリーズを基にしており、80億パラメータという比較的小さなモデルサイズながら、高い日本語処理能力を誇ります。

RakutenAI-7B-chat

Mistral AI社のオープンモデル「Mistral-7B-v0.1」を基に、継続的に大規模なデータを学習させて開発された70億パラメータの日本語基盤モデル。chat版、ちょっと癖のある回答が返ってきます。

RakutenAI-7B-instruct

楽天AIのinstruct版

 

modelsフォルダーに移動してダウンロードします。

 

GPUを使って実行してみます。

実行コマンド:llama-cli

オプション

-m:モデルファイル(GGUF形式など)のパス

-ngl (または–n-gpu-layers ):GPUにオフロードするレイヤー数

-t:生成処理に使用するCPUスレッド数

Raspberry Pi 5(ラズパイ5)のCPUは、2.4GHzで動作する4コアのArm Cortex-A76を採用しており、スレッド数は4スレッド(1コア1スレッド)です。

–repeat-penalty:同じ言葉の繰り返し抑制

1.0 ペナルティなし
1.05〜1.15 軽く抑制(推奨)
1.1 デフォルト
1.2〜1.5 強く抑制

 

 

DeepSeek-R1-Distill-Qwen-7B-Q4_K_M

前回インストールしておいたnvtopを使えばGPUの状態をモニターできます。

 

 

 

 

 

 

 

nvtopを見てみます。

左上にGPUの名前が表示されています。

茶色の線でLLMの読み込みが表示されています。急激にGPUに展開されているのがわかります。下側にGPUのVRAMを86%占有しているのが表示されています。

 

 

 

 

 

 

 

 

名前を日本語で聞いています。自分はDeepSeek-R1だと答えています。

 

 

 

 

 

 

 

 

 

また、これは中華製のLLMなので質問の種類によってはStart Thinking に中国語で思考の過程が表示されることがあります。

Ctrl-Cで終了します。

nvtopを見るとVRAMが一気に解放されているのがわかります。

 

 

 

 

 

 

 

 

 

 

 

日本語対応LLM

モデルのロードにはかなり時間を要します、我慢して待ちましょう。nvtopでモニターしているとGPUへの展開を終了してもそこから少しかかります。

Mistral-Nemo-Japanese-Instruct-2408-Q4_K_M

 

 

 

 

 

 

 

 

 

 

Llama-3-ELYZA-JP-8B

 

 

 

 

 

 

 

 

 

 

 

RakutenAI-7B-chat

 

 

 

 

 

 

 

 

 

 

 

以下はRakutenAIに太陽系の惑星について尋ねた結果です。

結構饒舌でホラも吹いてますがハルシネーションとはちょっと違う感じがします(聞いてもいないことに返事してますね。関西弁でいうボケ….?)。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RakutenAI-7B-instruct

 

 


 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*