OpenMythosをGPUを利用できるLinuxMint/Docker環境で構築しました ( 1050Ti / 1660 super / Pytorchへ移行 )

1.概要

前回までは、LinuxMint 22.3のオンプレミスでGPUを利用してOpenMythosを動かしました。しかし、OS更新で構築環境の整合性が取れずに動作しなくなる場合があり、Docker環境で動かすことにチャレンジしました。その内容を記述します。

2.詳細

LinuxMint 22.3が導入され、nvidiaのGPUがHWとして認識されている状態を想定します。
利用した機器は、amd 3200G, nvidia-1660 superです。

Docker環境を利用することでContainer内部に必要なPython3環境を準備できてpython3-venvも不要となり、操作も楽になります。利用したubuntu-24.04ベースのContainerはUser:Ubuntuが存在し、ContainerとLocal間のデータを楽にできるようにLocal上のUserとuid:gidが同じにしています。
オンプレ構築部分は参考資料(OpenMythosをLinuxMint 22.3に環境構築してみました)を参照願います。

(1) nouveauの無効化

/etc/modprobe.d/blacklist-nouveau.conf作成
# nvidia(nouveau)
blacklist nouveau
options nouveau modeset=0
適用します
$ sudo update-initramfs -u

(2) nvidia driver設定

$ ubuntu-drivers devices
$ sudo apt -y install nvidia-driver-595-open

(3) nvidia Container Toolkit導入

参考資料(Installing the NVIDIA Container Toolkit)を参照願います
$ curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
  && curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
$ sudo apt-get update
$ export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.19.1-1
  sudo apt-get install -y \
      nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}

(4) 再起動して確認します

$ nvidia-smi
$ nvidia-container-cli info

(5) dockerとdocker compose導入

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu noble stable"
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/docker.gpg
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ sudo gpasswd -a $USER docker
$ docker --version
$ docker compose version

(6) Dockerfile作成

FROM nvidia/cuda:12.6.0-devel-ubuntu24.04
ENV PYTHONUNBUFFERED=1 \
    DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip \
    git \
    && rm -rf /var/lib/apt/lists/*
RUN pip3 install --no-cache-dir --break-system-packages \
    torch \
    torchvision \
    torchaudio \
    open-mythos \
    swarms
WORKDIR /home/ubuntu
RUN chown ubuntu:ubuntu /home/ubuntu
USER ubuntu
CMD ["sleep", "infinity"]

(7) docker-compose.yml作成

services:
  openmythos:
    container_name: openmythos
    build:
      context: .
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    volumes:
      - .:/home/ubuntu
    tty: true
    stdin_open: true

(8) 起動

$ docker compose up -d

(9) login

$ docker compose exec --user ubuntu openmythos bash

(10) Usage実行

参考資料(OpenMythosのサンプルプログラムを動かしました)を参照願います。
$ python3 openmythos_usage.py

3.所見


最近、OS関連のupdateが多いので、Docker環境がオンプレ環境よりも使い心地は良いと感じています。基盤のLinuxMint 22.3の更新にDocker Contariner環境が影響されない上、オンプレ環境とあまり違和感を感じません。

4.追加

(1)nvidia-1050TiではOpenMythosは動作しない

nvidia-1050Tiが利用できる環境があるので、Dockerを利用したOpenMythosの学習環境ができないか試しました。しかし、nvidia-1050Tiのハードウェア上の理由でCUDA-12.6がサポートされず、動作させることができません。ハードウェアに制約があり、最新のドライバーが提供されないこともわかりました。また、nvidia関連を除外したcpuでの動作環境で試験をすると、OpneMythosを導入できません。OpenMythosはnvidiaが必須でした。

動作しないことがわかるのは、cudaの確認をpython3で実行するときでした
$ python3
Python 3.12.3 (main, Mar 23 2026, 19:04:32) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.cuda.is_available()
/usr/local/lib/python3.12/dist-packages/torch/cuda/__init__.py:187: UserWarning: CUDA initialization: The NVIDIA driver on your system is too old (found version 12060). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver. (Triggered internally at /pytorch/c10/cuda/CUDAFunctions.cpp:119.)
  return torch._C._cuda_getDeviceCount() > 0
False

(2)OpenMythosからPytorchと熟考ループへ移行して、OpenMythosを削除しました

OpenMythosの環境構築や実行試験をしていたのですが、処理ロジックを呼び出すだけでは中身がわかりません。AIでは大規模なテンソルを利用するのでデータの追跡がとても難しく、ロジックが明確なことが大切だと思います。難しい部分はGoogleAI(Gemini)に手助けを依頼して、少し処理を追跡をしてみました。

OpenMythosで利用されている熟考ループの汎用的なサンプルコードを参照して、Pytorchのforward処理部分にbackwardを伴わない数回のループを追加して代替できると知りました。これを知って、OpenMythosはPytorchで実現でき、Pytorchのみに移行しました。これでnvidia-1050Tiでも実行可能になりました。サンプルにした例題は下記内容です。

かれのなまえはたろうです。かれのいぬはぽちです。

私には初めての文書でしたが、LLM分野の方はご存知の文書だと思います。
LLMは、この文書を学習して、「かれのなまえは」と問い合わせると、「たろうです」と答えるロジックを作ります。

環境構築面ではDockerfileを修正します。
<修正前>
RUN pip3 install --no-cache-dir --break-system-packages \
    torch \
    torchvision \
    torchaudio \
    open-mythos \
    swarms
<修正後>
RUN pip3 install --no-cache-dir --break-system-packages \
    torch \
    torchvision \
    torchaudio \
    swarms

(3) nvidia 1050Tiはnvidia-driver-580でcuda 13.0サポート。OpenMythos動作します

nvida-driver-535がrecommenedeですが、nvidia-driver-580へupdateできます。
これにより、cuda 13.0がサポート対象となり、cuda 12.6.0を設定して、
nvidia 1660 superと同じようにOpenMythosを利用できました。
docker設定方法はnvidia 1660 superと同一です。

(4) Usageの修正

Usageに記載されているPythonプログラムをopenmythos_usage.pyとして作成して実行するとエラーとなるので、コードの以下のように修正します。

#rho = torch.linalg.eigvals(A).abs().max().item()
rho = A.abs().max().item()

$ source ~/mypy/bin/activate
(mypy) $ python3 openmythos_usage.py
[MLA] Parameters: 1,538,626
[MLA] Logits shape: torch.Size([2, 16, 1000])
[MLA] Generated shape: torch.Size([2, 24])
[MLA] Spectral radius ρ(A) = 0.3679 (must be < 1)

動作しました。

参考

[本ブログ内参照]
[外部サイト参照]

コメント

過去30日間に良く読まれた記事

miniPCのBMAXでWindows11のsecure boot設定漏れでトラブル発生

Windows95/98のPCゲームをUbuntu/LinuxMintの最新PCで楽しむ方法 ( KVM / Wine / dosbox-x / midi )

LinuxMint/ubuntuにWine 11導入を試しました ( LinuxMint 21.3 / 22.3 ubuntu 22.04 / 26.04 Wine 11.0 / 11.6 / 11.8 / 11.13 )