前回ラズパイ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を対象に設定していきます。
以下でもダウンロードできます。
|
1 2 3 |
cd ~/Downloads wget https://sdk.lunarg.com/sdk/download/1.4.341.1/linux/vulkansdk-linux-x86_64-1.4.341.1.tar.xz |
必要なパッケージなどをインストールしておきます。
|
1 2 3 4 5 6 |
sudo apt update sudo apt upgrade -y sudo apt install mesa-vulkan-drivers vulkan-tools sudo apt install xz-utils sudo apt install -y mesa-va-drivers libvulkan-dev glslc cmake |
インストール用フォルダー(vulkan)を作っておきます。
|
1 2 3 |
cd ~ mkdir vulkan cd vulkan |
ダウンロードしておいたものを解凍します。解凍中は何も表示されませんが問題ないです。
|
1 |
tar xf $HOME/Downloads/vulkansdk-linux-x86_64-1.4.341.1.tar.xz |
ヘッダーファイルをコピー
|
1 2 3 4 |
export VULKAN_SDK=~/vulkan/1.4.341.1/x86_64 sudo cp -r $VULKAN_SDK/include/vulkan /usr/local/include/ sudo cp -r $VULKAN_SDK/include/vk_video /usr/local/include/ |
sourceコマンドを使用して、セットアップスクリプトを現在のシェルに読み込みます。
|
1 |
source ~/vulkan/1.4.341.1/setup-env.sh |
llama.cpp
llama.cppをクローン
|
1 2 3 4 5 |
cd ~ git clone https://github.com/ggml-org/llama.cpp cd llama.cpp |
必要なパッケージなどをインストール
|
1 2 3 |
sudo apt install libvulkan-dev glslc sudo apt-get install -y libvulkan1 mesa-vulkan-drivers vulkan-tools libvulkan-dev glslc |
vulkan ターゲットでllama.cppをビルド
|
1 2 3 |
cmake -B build -DGGML_VULKAN=ON cmake --build build --config Release |
量子化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量子化モデル
ELYZA社が開発した日本語に特化した大規模言語モデル。Meta社の「Llama 3」シリーズを基にしており、80億パラメータという比較的小さなモデルサイズながら、高い日本語処理能力を誇ります。
Mistral AI社のオープンモデル「Mistral-7B-v0.1」を基に、継続的に大規模なデータを学習させて開発された70億パラメータの日本語基盤モデル。chat版、ちょっと癖のある回答が返ってきます。
楽天AIのinstruct版
modelsフォルダーに移動してダウンロードします。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
cd ~/llama.cpp/models #DeepSeek-R1-Distill-Qwen-7B-Q4_K_M wget https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-7B-GGUF/resolve/main/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf #Mistral-Nemo-Japanese-Instruct-2408-Q4_K_M wget https://huggingface.co/QuantFactory/Mistral-Nemo-Japanese-Instruct-2408-GGUF/resolve/main/Mistral-Nemo-Japanese-Instruct-2408.Q4_K_M.gguf #Llama-3-ELYZA-JP-8B wget https://huggingface.co/elyza/Llama-3-ELYZA-JP-8B-GGUF/resolve/main/Llama-3-ELYZA-JP-8B-q4_k_m.gguf #RakutenAI-7B-chat wget https://huggingface.co/mmnga/RakutenAI-7B-chat-gguf/resolve/main/RakutenAI-7B-chat-q4_K_M.gguf #RakutenAI-7B-instruct wget https://huggingface.co/mmnga/RakutenAI-7B-instruct-gguf/resolve/main/RakutenAI-7B-instruct-q4_K_M.gguf |
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
|
1 2 |
cd ~/llama.cpp ./build/bin/llama-cli -m models/DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf -ngl 40 -t 4 --repeat-penalty 1.1 |
前回インストールしておいた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
|
1 2 |
cd ~/llama.cpp ./build/bin/llama-cli -m models/Mistral-Nemo-Japanese-Instruct-2408.Q4_K_M.gguf -ngl 41 -t 4 --repeat-penalty 1.1 |
Llama-3-ELYZA-JP-8B
|
1 2 |
cd ~/llama.cpp ./build/bin/llama-cli -m models/Llama-3-ELYZA-JP-8B-q4_k_m.gguf -ngl 40 -t 4 --repeat-penalty 1.1 |
RakutenAI-7B-chat
|
1 2 |
cd ~/llama.cpp ./build/bin/llama-cli -m models/RakutenAI-7B-chat-q4_K_M.gguf -ngl 40 -t 4 --repeat-penalty 1.1 |
以下はRakutenAIに太陽系の惑星について尋ねた結果です。
結構饒舌でホラも吹いてますがハルシネーションとはちょっと違う感じがします(聞いてもいないことに返事してますね。関西弁でいうボケ….?)。
RakutenAI-7B-instruct
|
1 2 |
cd ~/llama.cpp ./build/bin/llama-cli -m models/RakutenAI-7B-instruct-q4_K_M.gguf -ngl 40 -t 4 --repeat-penalty 1.1 |









Leave a Reply