概要
経緯
ある日、LLMの仕組みが知りたい!と思って、調べてみたところ、ローカルでLLMを動かせるソフトとしてllama.cppというものがあると知りました。
C/C++なら多少なじみがあったので、自分でソースを読んだり動かしたりすればLLMの仕組みがわかるのでは!?と考えました。
実際やってみたところ、意外とすんなりビルドし動かすことができました。ビルドして動かせたということは、llama.cppの開発に貢献する入口にすら立てたということになります。
これに手ごたえを感じ、いろんなOSSをデバッガで動かしてみたい!と思っていくつかを試しました。
本記事では、その顛末と振り返りを話します。
結論
- 意外とすんなり成功することも多い。
- トラブルシューティングは難しい。各種ビルドツールを深く理解するのが重要と推測。
ビルドしたソフトたち
- freeglut
- llama.cpp
- linuxカーネル
- sqlite
- micro(go製のエディタ。linux上でビルド。)
- やねうら王
- chibicc
これらのうち、下4つのソフトはビルドガイドの通りにやれば動かしてデバッグするところまでスッと行けました。
ほぼC系、というやや狭い範囲での話になってはしまいますが、「全く知らないソフトをビルドしてみる」ことへのハードルは自分の中で下がったように感じました。
上3つはすでに記事にしました。手順はそれらの記事を参照していただきたいのですが、以下ではその過程で起きたトラブルをまとめます。
llama.cpp : gguf形式ファイルがどこからダウンロードできるかがわからない
これがllama.cppで唯一躓いたポイントでした。
hugging faceの使い方がよくわからず、目的のggufファイルをどこからダウンロードできるかがわかりませんでした。
当時どう探した結果見つからなかったのかわからないのですが、今やってみたら検索窓にggufと入れるだけで何個か候補を表示してくれました。

表示されてるのをクリックすると右側にファイルダウンロードリンクが出てくるのでそれを押せばよいです。

とはいえ謎なのは、たとえば「meta-llama/Llama-3.2-3B-Instruct」のページに行くとそのようなリンクは表示されません。

こういうページからggufにたどり着く方法は分かりませんでした。
linux : 自作した最小シェルが動かない(読み込めない)
linuxはビルドガイドが見つからず、wslでビルドした記事も見つからなかったので、chatGPTに頼りながらやることにしました。
すると、以下のようなスクリプトでinitramfsというシェルを作成するよう言われました。
cat > initramfs/init <<'EOF'
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
echo "Hello from custom kernel!"
exec /bin/sh
EOF
chmod +x initramfs/init
# cpio形式で圧縮
cd initramfs
find . -print0 | cpio --null -ov --format=newc | gzip -9 > ../initramfs.cpio.gz
qemu-system-x86_64 -kernel arch/x86_64/boot/bzImage -nographic -append "root=/dev/sda1 console=ttyS0"
しかしこれを立ち上げるとkernel panicになってしまいシェルが立ち上がりませんでした。
原因は未だによくわかっていません。結局、すでにあるqcow2を使うことで回避しました。
linux : wslのtcp通信が死んだ
突然、wslのtcp通信が死んでしまい、aptの利用ができなくなりました。
結局、ubuntuをクリーンインストールしたので原因は分かりませんでした。
wsl --unregister ubuntu
ビルドのトラブルシューティングは難しい
以上、3つのトラブルを紹介しましたが、chatGPTにトラブルシューティングをしてもらおうと思ってもなかなかうまくいきませんでした。
2つ目に至っては、結果的に回避策を出したのは自分です。
聞き方も悪かったのかもしれませんが、一度トラブルが起きてしまうと復旧は難しいのだなと感じました。
最後に
毒にも薬にもならないような内容になってしまいましたが、生々しい失敗/苦労話が残せたのではないかと思います。
今後も引き続き、上記の失敗は根本的にはどういう原因だったのか?など考えていきたいと思います。