背景:一時期熱くなっていたLLMの理解に関して、すぐに飽きて放置していた。が、仕事上も普段使いでLLMが必須になるにつれもう少し理解したいと思うようになった
取り組み:LLM from Scratch (本としては、LLM自作入門)をやってみる。最低限、Attentionを自分なりに理解したい
結論:あてにしていたGPUがささったマザー*1の電源を入れると起動しないことが分かった。しょうがないのでUbuntuだけ入れた。どうしたものかー>マザーの電池を新しいのに交換して、問題なくブートできると期待されるオプションを設定することでGPUが刺さった状態でブートできた。
詳細:
別件(記事作成)で忙しく、自分の道楽も止まっていた。投稿完了したので、開放されて好きなことをやる*2。
生成AIの盛り上がりが激しく自分でもfrom scratchで手作りして勉強したいと思っていた。その後、あまりに流行りすぎてLLMはもうええかと思っていた。が、自分は仕事上でもLLMが手放せない状態になって、やっぱり勉強することにした。
知人から売ってもらった中古のGPUボードが刺さったデスクトップがあり、全然動かしていなかったので、これをUbuntu専用機にして、LLM from scratchをやってみることにする。Dockerの勉強も兼ねて、LLM環境はDockerのコンテナ内に構築する。
まずはUbuntu Server を入れる(USBブートで入れる)
入れたいUbuntu は以下
以下からbootable USBを焼くためのインストーラを入手
これであっているのかあまりちゃんと確認していないが、とりあえずUSBに焼いてみる。

焼き終えた後もUSBはファイルシステムとして参照できていて、内容は以下
$ ls -l */* -rw-r--r-- 1 foo foo 12 Jul 26 08:59 'System Volume Information/WPSettings.dat' -rw-r--r-- 1 foo foo 47 Jul 26 09:22 UUI/Installed.txt -rw-r--r-- 1 foo foo 219 Oct 20 2023 ventoy/ventoy.json UUI/Linux-ISOs: total 3137760 -rw-r--r-- 1 foo foo 3213064192 Jul 26 08:46 ubuntu-24.04.2-live-server-amd64.iso ventoy/theme: total 0 drwxr-xr-x 1 foo foo 0 Apr 28 2022 UUI
ファイルフォーマットはexFatになっている

久しぶりに電源を入れたらGPUが刺さった状態でBISO画面が出ないのであった。

GPUを抜くとブートする。だから、、BIOSの設定上何か矛盾しているのか、電源容量が足りなくなっているのか、・・・ ChatGPTに聞いてみると、BIOSをリセットしてみよとか、BIOSで「CSMを有効」「起動デバイス制御:UEFIとLegacy両方」に設定してみてとかアドバイスをもらってやってみたが、やはりBIOS画面まで行けず。
しょうがないので、GPUなしで単なるUbuntuマシンとしてセットアップは行った。
今後のやること。。とりあえずはDockerを入れてコンテナ内で、LLMの試験をやってみる。あとできることは、容量のデカい電源と交換するぐらいなのだが、800Wの電源だと1万~2万ぐらいするようだ。電源入れ替えて起動しないままっだたら電源の投資が無駄になる。
まぁそもそもマザーもASUSのP8Z77-V PROというかなり古いものなので、古いPCパーツを動かすために投資するってのが、泥沼にハマるリスクが高い。新しいめの中古か、割り切ってAWSの機械学習用のインスタンスを契約するか、あるいは、GoogleのColabでお金払って契約するか、、そっちの方が堅実路線ではある
追記
固定IPの設定
/etc/netplan/99_config.yaml を作成しIPアドレスを設定する
設定例
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
dhcp6: false
addresses: [192.168.1.70/24]
routes:
- to: default
via: 192.168.1.1
nameservers:
addresses: [192.168.1.1, 8.8.8.8, 8.8.4.4]sudo chmod 600 /etc/netplan/99_config.yaml sudo netplan apply
■追記
マザーボードのボタン電池が切れているのでは?と気になっていて、電池を交換した。改めて、BIOSで「CSMを有効」「起動デバイス制御:UEFIとLegacy両方」に設定、再起動するとNVIDIAがささったままでBOOTされた。ubuntuが起動されて起動メッセージを確認すると以下
# dmesg |grep -i nouveau [ 7.977768] nouveau 0000:02:00.0: vgaarb: deactivate vga console [ 7.977903] nouveau 0000:02:00.0: NVIDIA GK110 (0f0050a1) [ 8.100355] nouveau 0000:02:00.0: bios: version 80.10.2c.00.02 [ 8.102496] nouveau 0000:02:00.0: fb: 6144 MiB GDDR5 [ 8.169610] nouveau 0000:02:00.0: DRM: VRAM: 6144 MiB [ 8.169617] nouveau 0000:02:00.0: DRM: GART: 1048576 MiB [ 8.169620] nouveau 0000:02:00.0: DRM: TMDS table version 2.0 [ 8.171803] nouveau 0000:02:00.0: DRM: MM: using COPY for buffer copies [ 8.172920] snd_hda_intel 0000:02:00.1: bound 0000:02:00.0 (ops nv50_audio_component_bind_ops [nouveau]) [ 8.174798] [drm] Initialized nouveau 1.4.0 20120801 for 0000:02:00.0 on minor 0 [ 8.184483] nouveau 0000:02:00.0: [drm] Cannot find any crtc or sizes [ 8.226343] nouveau 0000:02:00.0: [drm] Cannot find any crtc or sizes [ 8.235903] nouveau 0000:02:00.0: [drm] Cannot find any crtc or sizes
nouveauとは、NVidiaのプロプライエタリなドライバを避けるために開発されたオープンソース版ドライバらしい。
だが、機械学習等のためにCUDAを使いたいなら、nouveauは無効化する必要があるらしい。
GeForce GTX TITANの場合、CUDA 8.0までが動くらしい。GUDA8.0の場合、PyTorch側ではサポート外となり動かないかもとCopilotから言われた。
GPU名 GeForce GTX TITAN Compute Capability 3.5 対応CUDAバージョン 最大 CUDA 8.0(公式サポート) 対応CuDNN CuDNN v5まで(Compute Capability 3.0以上が必要)
とりあえず、進められるところまでは進めてみよう。コンパチの問題が出てきたら、中古で手ごろなGPUを買うことにする。そもそもGPUの性能を上げても今度はマザー側の性能がボトルネックになるらしい。
自習に使う本は以下のLLM自作入門。はたしてどこまで進められるのか!?
■Dockerを入れる
何回やっているか分からないが、パッケージではなく、最新版のDockerを入れる。copilotに聞いて教わった手順でやってみるが、、
sudo apt update sudo apt install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo docker run hello-world sudo usermod -aG docker $USER
鍵の追加も最新ですと言われつつ、途中までは動作するが、以下の内容で怒られる。docker-ceはだめですと。。
Package docker-ce is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source
やっぱりDockerのサイトに行って、それに倣って実行する方が確実か。見るべきページは以下
Ubuntu | Docker Docs
上記サイトの手順通りに実行、エラーなくインストールが行われた。一般権限でdockerコマンドが利用可能
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world
sudo groupadd docker
sudo usermod -aG docker $USER$ docker --version Docker version 28.3.2, build 578ccf6
Dockerが入ったので、Dokcer版ThingsBoardもも入れてみる
RPiにDockerを入れてthingsboardを入れてみる - chakokuのブログ(rev4)
file:docker-compose.yml
version: '3.0'
services:
mytb:
restart: always
image: "thingsboard/tb-postgres"
ports:
- "8080:9090"
- "1883:1883"
- "7070:7070"
- "5683-5688:5683-5688/udp"
environment:
TB_QUEUE_TYPE: in-memory
volumes:
- ~/.mytb-data:/data
- ~/.mytb-logs:/var/log/thingsboard上記ファイルとディレクトリを作成して、ownerを変更した上で、以下でコンテナ構築、実行
$ docker compose up -d
*略*
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
76ea7c57eb01 thingsboard/tb-postgres "start-tb.sh" About a minute ago Up About a minute 0.0.0.0:1883->1883/tcp, [::]:1883->1883/tcp, 0.0.0.0:7070->7070/tcp, [::]:7070->7070/tcp, 0.0.0.0:5683-5688->5683-5688/udp, [::]:5683-5688->5683-5688/udp, 0.0.0.0:8080->9090/tcp, [::]:8080->9090/tcp tb-mytb-1いつものログイン画面が表示された

ThingsBoardのコンテナを一つ走らせている状況で、CPU利用率は非常に低い、メモリは16GB中、1.8GB使用済みになっている

