環境
RHEL互換OS
AMD Ryzen7 5700X
DDR4 3200Mhz Mem24GB(8x3)
Intel ARC A580(Vram8GB)
Intel ARC A580 について簡単にまとめます。
TSMC N6プロセスで製造された第一世代GPUです
Xeコアを24個搭載し、RTXとAV1に対応している安価なGPUです。
以前まではこの価格帯ではIntel ARCだけでした
帯域幅512GB/s
GDDR6世代のVRAM8GB搭載
消費電力185Wのなかなかの大食いなのが痛いですね、、
目的
Zetaというアプリ人気ですよね。aiとロールプレイできるみたいな趣旨のアプリです。
この記事はzetaをローカルで再現する場合、勝機はあるのかという検証です。
結論:8Bモデルでも十分実用的です。
難として、わざわざIntel ARCでやる意味は薄いですね、
#----
スタック
OneAPI
oneAPIについてわかりやすい記事がありましたのでおいてきます。
llama.cpp
KoboldCPP
使用させていただいたモデル
構築に入ります
RENDER_GIDの確認を行います。
user01@localhost:~/vllm$ echo $RENDER_GID
105
私の環境では105でした。
RHELのセキュリティを緩めておきます。
sudo firewall-cmd --permanent --add-port=5001/tcp
sudo firewall-cmd --reload
コンテナの作成に移りましょう。
podman run --rm -it \
--device /dev/dri \
--group-add 105 \
--ipc=host \
--security-opt label=disable \
-p 5001:5001 \
--name llm-arc-container \
intel/oneapi-basekit:latest /bin/bash
#### コンテナ内でドライバーをインストールします。
apt-get update && apt-get install -y \
intel-level-zero-gpu \
intel-opencl-icd
コンテナ内でGPUが認識されていることを確認
root@1515c0197adf:/# ls /dev/dri/
card1 renderD128
root@1515c0197adf:/# sycl-ls
[level_zero:gpu][level_zero:0] Intel(R) oneAPI Unified Runtime over Level-Zero, Intel(R) Arc(TM) A580 Graphics 12.55.8 [1.15.38308+1]
[opencl:cpu][opencl:0] Intel(R) OpenCL, AMD Ryzen 7 5700X 8-Core Processor OpenCL 3.0 (Build 0) [2026.20.3.0.19_160000.xmain-hotfix]
[opencl:gpu][opencl:1] Intel(R) OpenCL Graphics, Intel(R) Arc(TM) A580 Graphics OpenCL 3.0 NEO [26.18.38308.1]
必要なツールを入れておきましょう。
source /opt/intel/oneapi/setvars.sh
apt-get update && apt-get install -y \
git \
cmake \
g++ \
make \
intel-oneapi-compiler-dpcpp-cpp
リポジトリをもってきます。
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
source /opt/intel/oneapi/setvars.sh
cmake .. -DGGML_SYCL=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DCLBlast_DIR=/opt/intel/oneapi/
#### make -j8 なら8コアという具合に使用できます。
全コアを使用する
make -j$(nproc)
llama.cppがIntel Arcを認識しているか確認
root@1515c0197adf:/llama.cpp/build# ls -F
CMakeCache.txt Makefile cmake_install.cmake ggml/ llama.pc tools/
CMakeFiles/ Testing/ common/ license.cpp pocs/ vendor/
CTestTestfile.cmake app/ compile_commands.json llama-config.cmake src/
DartConfiguration.tcl bin/ examples/ llama-version.cmake tests/
root@1515c0197adf:/llama.cpp/build# ./bin/llama-ls-sycl-device
Found 1 SYCL devices:
| | | | |Max | |Max |Global | |
| | | | |compute|Max work|sub |mem | |
|ID| Device Type| Name|Version|units |group |group|size | Driver version|
|--|-------------------|---------------------------------------|-------|-------|--------|-----|-------|---------------------|
| 0| [level_zero:gpu:0]| Intel Arc A580 Graphics| 12.55| 384| 1024| 32| 8096M| 1.15.38308+1|
SYCL Optimization Feature:
|ID| Device Type|Reorder|
|--|-------------------|-------|
| 0| [level_zero:gpu:0]| Y|
何もでない場合認識していません。
CLIでモデルを動かす
モデルをもってくる
wget https://huggingface.co/bartowski/L3-8B-Stheno-v3.2-GGUF/resolve/main/L3-8B-Stheno-v3.2-Q4_K_M.gguf
動かす際のコマンドです
#./bin/llama-cli -m <モデル名>.gguf -p "" -ngl 99 --sycl 0
起動
ONEAPI_DEVICE_SELECTOR=level_zero:gpu ./bin/llama-cli -m L3-8B-Stheno-v3.2-Q4_K_M.gguf -ngl 99
Promptが処理速度
Generationが生成速度です
目安としては人間が読む速度の約2〜4倍のスピードらしいです
zetaと体感差はありません。広告がない分こちらに勝機ありです
> おはよーー!!
おはようございます!😊
[ Prompt: 15.9 t/s | Generation: 13.0 t/s ]
KoboldCPPの準備
一度カレントディレクトリに戻ります
リポジトリを入れます
いちおう仮想環境で動かします。
cd /
git clone https://github.com/LostRuins/koboldcpp
cd koboldcpp
apt-get update && apt-get install -y python3-pip
apt install python3.12-venv
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
推論エンジンをビルドする
SYCLがCUDAみたいなイメージです
make LLAMA_SYCL=
起動
ONEAPI_DEVICE_SELECTOR=level_zero:gpu \
python3 koboldcpp.py \
--model /llama.cpp/build/L3-8B-Stheno-v3.2-Q4_K_M.gguf \
--gpulayers 99 \
--port 5001 \
--host 0.0.0.0
実際にブラウザからキャラクターを作成して確認しましょう