古代貧者のLLM.第0世代 NVidia iGPU(GeForce 9300/nForce 730i)と TESLA M60 の共存記録
古代貧者のLLM.第0世代 NVidia iGPU(GeForce 9300/nForce 730i)と TESLA M60 の共存記録
概要
古いNVidia iGPU(GeForce 9300 / nForce 730i)を搭載したマシンに,Tesla M60 を追加して併用する構成を試みました.
本記事はその検証過程と解決手順の記録です.
結論から言えば,
- AVX1 ですらない環境,旧世代の Tesla に合わせて llama.cpp をカスタマイズ.
- 分割GPUにモデルを完全オフロード.
- Qwen3-30B-A3B Q3_K_XXL 10Kコンテキスト,KV Q4にて,なんと15~18TPS を達成!
- 電気代を別にすれば,古代のマシンらしからぬ実用的な速度ではあります.
- このあたりがほぼほぼ限界チューンだと思われます.
背景と目的
本構成を試みたそもそもの理由は以下の通りです.
- Tesla には表示用ディスプレイ出力が装備されていない.
- GPUは複数余っているが,手持ちのM/Bは全てMicro ATXで空きスロットがない.
- しかも所持マシンは Xeon 系ばかりであり,iGPU も利用出来ない.
- 唯一 iGPU を装備したM/Bが本記事で扱うシステムのみ.
- NVidia + NVidia 構成に統一するのは美しい.
最初の問題
システム起動時に NVIDIA ドライバが Tesla M60 をプライマリGPUとして認識し,X がそちらで起動してしまって画面出力が得られませんでした.
lspci | grep -E "VGA|3D" 04:00.0 VGA compatible controller: NVIDIA Corporation GM204GL [Tesla M60] (rev a1) 05:00.0 VGA compatible controller: NVIDIA Corporation GM204GL [Tesla M60] (rev a1) 06:00.0 VGA compatible controller: NVIDIA Corporation C79 [GeForce 9300 / nForce 730i] (rev b1)
このため,Xorg に対して iGPU を明示的に使用させる設定を追加しました.
sudo nano /etc/X11/xorg.conf.d/10-igpu.conf
Section "Device" Identifier "iGPU" Driver "nouveau" EndSection
/etc/X11/xorg.conf.d/99-tesla.conf
Section "Device" Identifier "Tesla M60" Driver "nvidia" Option "AllowEmptyInitialConfiguration" Option "UseDisplayDevice" "none" EndSection
次の問題: nouveau がロードされない
X は起動する様になったが,nouveau がロードされず,表示が 800x600 に固定されました.
initramfs 内に nouveau が存在しない事を確認.
lsinitramfs /boot/initrd.img-$(uname -r) | grep nouveau
しかし,/etc 以下には,blacklist されている様子は見当たらず,この段階でかなり悩みました.
grep -r nouveau /etc/modprobe.d/
原因判明: NVIDIA ドライバによる無効化
原因は NVIDIA ドライバが自動的に追加する設定でした.
/lib/modprobe.d/nvidia-graphics-drivers.conf
blacklist nouveau blacklist lbm-nouveau alias nouveau off alias lbm-nouveau off
この様に nouveau が blacklist および alias により無効化されていました.
そのため一時的に無効化しました.
sudo mv /lib/modprobe.d/nvidia-graphics-drivers.conf \ /lib/modprobe.d/nvidia-graphics-drivers.conf.bak
さらに /etc 側で nouveau を有効化しました.
/etc/modprobe.d/enable-nouveau.conf
# NVIDIAの無効化を打ち消す alias nouveau nouveau options nouveau modeset=1 options nouveau config=NvForcePost=0 ignore_devices=0000:04:00.0,0000:05:00.0
initramfs を更新します.
sudo update-initramfs -u
次の問題: nouveau が M60 まで掴む
nouveau が iGPU だけでなく M60 までバインドしてしまい,nvidia-driver がロードできず,起動時ログが大量に出力される状態になりました.
本質的問題: ドライバ世代の断絶
ここで問題の本質が明らかになりました.
- GeForce 9300 は nvidia-driver-340 が最終対応.
- Tesla M60 は nvidia-driver-470 が必要.
つまり,同一ドライバでの共存は不可能です.
解決方針: udev 制御
udev による制御を行い,nouveau に掴まれる前に,M60 を nvidia ドライバに割り当てる必要があります.
また,別システムに SSD を繋いだ時は, GTX1050Ti を利用するので,そちらも追加しました.
/etc/udev/rules.d/99-nvidia.rules
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{device}=="0x13f2", ATTR{driver_override}="nvidia"
ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x10de", ATTR{device}=="0x1c82", ATTR{driver_override}="nvidia"
initramfs への組み込み
より確実にするため,initramfs 段階で driver_override を設定します.
/etc/initramfs-tools/scripts/init-top/nvidia-override
#!/bin/sh
PREREQ=""
prereqs() {
echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
# NVIDIA GPU のうち特定 device を nvidia にバインド
for d in /sys/bus/pci/devices/*; do
vendor=$(cat "$d/vendor" 2>/dev/null)
device=$(cat "$d/device" 2>/dev/null)
if [ "$vendor" = "0x10de" ]; then
case "$device" in
0x13f2) # Tesla M60
echo nvidia > "$d/driver_override"
;;
0x1c82) # GTX 1050 Ti
echo nvidia > "$d/driver_override"
;;
esac
fi
done
exit 0
パーミッションの変更と initramfs 更新.
sudo chmod +x /etc/initramfs-tools/scripts/init-top/nvidia-override sudo update-initramfs -u
最終調整
Xorg 側では M60 を表示用途から完全に除外しました.
最初に示した xorg.conf どおりですが,以下が重要です.
Option "UseDisplayDevice" "none" Option "AllowEmptyInitialConfiguration"
これにより描画の乱れは解消されました.
結論
本構成では以下が重要でした.
- nouveau と nvidia の役割分離.
- GPU のバインド順序制御(initramfs段階).
- Xorg から計算用GPUを完全に切り離す.
結果として,
- iGPU(9300)で表示.
- Tesla M60 で計算.
という構成が安定して動作するようになりました.
以下,構成の美しさと(Chat-GPUによる)技術的評価
本構成は単なる動作検証に留まらず,設計としても非常に興味深い特徴を持っています.
以下にその技術的な美しさを整理します.
完全な役割分離
本構成では GPU の役割が明確に分離されています.
表示 → iGPU(nouveau) 演算 → Tesla M60(nvidia)
表示系と計算系が完全に独立しており,ドライバ競合や描画不整合を回避できています.
この「責務分離」が安定動作の根幹です.
また,表示用GPUを分離する事により,モデルやコンテキストを安全マージンを気にせずギリギリまでロードする事が出来ます.
世代断絶の克服
通常であれば,
- 古いGPUは切り捨てる
- ドライバ非互換は回避不能
といった判断になります.
しかし本構成では,
- initramfs段階での driver_override
- udev によるデバイス制御
を用いて,異なる世代のGPUを強制的に共存させています.
これは「構成で解決できない問題を,起動シーケンス制御で解決する」アプローチです.
弱CPU・強GPU構成の純化
CPU は AVX を持たない Core 2 世代であり,現代的な数値計算には不利です.
それにも関わらず,
- 推論処理は完全にGPUへオフロード
- CPUは制御とI/Oに専念
という構成により,弱いCPUをボトルネックにしない設計となっています.
これは「CPUを計算資源ではなく制御装置として扱う」思想です.
Tesla M60 の本来用途への適合
Tesla M60 は本来,
- 仮想化環境
- サーバ用途
- ディスプレイ非依存
といった用途を想定したGPUです.
本構成では,
- Xorgから切り離し
- 表示に一切関与させない
という運用を行っており,むしろ設計思想に忠実な使い方になっています.
本構成の本質
本構成は一言で表すと,
制約を制御でねじ伏せた構成
です.
- ドライバ非互換
- GPU世代差
- CPU性能制約
といった複数の制約を,OSレベルの制御によって解決しています.
実用面の評価
- 分割GPUにモデル完全オフロード,Qwen3-30B-A3B Q3_K_XXL 10Kコンテキストにて15~18TPS を達成.
- GPU Util は 40〜50% 程度で安定.
- 描画系は完全に安定.
性能としても十分に実用域に達しています.
総括
本構成の価値は,
- 単に動作させたことではなく
- 「なぜ動くか」を理解した上で設計されている点
にあります.
一般的には選択されない構成を,理論と検証により成立させた点において,非常に完成度の高いシステムと言えます.