chakokuのブログ(rev4)

テック・コミック・DTM・・・ごくまれにチャリ

DesktopマシンをUbuntu専用機にする

背景:一時期熱くなっていた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使用済みになっている

参考URL
Ubuntu 22.04 LTSで固定IPアドレスの設定 #Linux - Qiita

*1:ASUSのP8Z77-V PRO

*2:会社の健康診断で再認識したのだが、自分はコレステロール値がエラク高くて、多分長生きしない。だから道楽を加速する。コレステロール下げる薬飲むのも嫌だし・・