0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AMD MI210 で Transformers を動かす

Last updated at Posted at 2025-10-18

はじめに

この記事は、2025年春に、某大学にAMD MI210を搭載したクラスタシステムが導入されたため、この上でLLMを使った実験を行う方法を調べた試行錯誤の記録(2025年10月現在)です。

AMD GPUを取り巻く環境は変化が激しく、かつ、AMD本家のドキュメントも玉石混交であり、どのドキュメントを信用したら良いか分からないことが多かった。おそらく、この記事も、投稿した直後には現実と合わなくなると思われるので、そのつもりで参照願います。

コンテナイメージの選択

AMD純正Dockerコンテナイメージには、いろんな種類がある。主なところで、

  • rocm/dev-ubuntu-24.04
    • Ubuntu24.04 + Python3.12.3
    • ROCmがインストールされているだけで、Pythonモジュールは一切なし。
  • rocm/pytorch
    • Ubuntu24.04 + Python3.12.3
    • /opt/venv/以下に、独自ビルドのPyTorchがインストール。
  • rocm/vllm
    • Ubuntu22.04 + Python3.12.11
    • /usr/local/lib/ 以下に、独自ビルドのPyTorch, vllm, flash_attnなどがインストール。

当初、AMDによってビルドされたPyTorchの方が確実に最適化されている可能性が高いと考えて、rocm/pytorch コンテナまたは rocm/vllm コンテナを利用する方針を検討した。しかし、これらのコンテナに bitsandbytes モジュールを組み合わせると、様々なエラーが発生し動作する組み合わせを発見できなかった。そのため、rocm/dev-ubuntu-24.04 コンテナを、ベースとなるコンテナイメージとして利用する方針を採用した。

https://hub.docker.com/r/rocm/dev-ubuntu-24.04/tags を見ると、rocm/dev-ubuntu-24.04 コンテナには、通常版の系列(6.4.4など)と完全版の系列(6.4.4-completeなど)がある。hipblas などが必要になるので、完全版を使う。

ただ、rocm/dev-ubuntu-24.04 コンテナには、本当に最小限のツールしかインストールされていない。例えば、git や cmake もインストールされていないので、このままのコンテナイメージ上では各種作業に差し支える。そのため、以下のような Dockerfile を作成し、ある程度の作業ができるコンテナイメージを用意する。

Dockerfile
FROM rocm/dev-ubuntu-24.04:6.4.4-complete

RUN apt update && \
    DEBIAN_FRONTEND=noninteractive apt install -y \
        build-essential \
        ca-certificates \
		cmake \
		curl \
		gfortran \
        git \
		libjpeg-dev \
		libopenblas64-dev \
		python3 \
        python3-dev \
        python3-pip \
        python3-packaging \
        python3-venv \
		vim && \
    apt clean && \
    rm -rf /var/lib/apt/lists && \
    pip3 install --break-system-packages --root-user-action=ignore uv wheel setuptools

# remove cache files
RUN rm -rf /root/.cache

ハードウェアの確認

ハードウェアの種類の確認は、rocm-smi コマンドを使う。

$ rocm-smi --showproductname

============================ ROCm System Management Interface ============================
====================================== Product Info ======================================
GPU[0]		: Card Series: 		Instinct MI210
GPU[0]		: Card Model: 		0x740f
GPU[0]		: Card Vendor: 		Advanced Micro Devices, Inc. [AMD/ATI]
GPU[0]		: Card SKU: 		D67301V
GPU[0]		: Subsystem ID: 	0x0c34
GPU[0]		: Device Rev: 		0x02
GPU[0]		: Node ID: 		2
GPU[0]		: GUID: 		63484
GPU[0]		: GFX Version: 		gfx23e
GPU[1]		: Card Series: 		Instinct MI210
GPU[1]		: Card Model: 		0x740f
GPU[1]		: Card Vendor: 		Advanced Micro Devices, Inc. [AMD/ATI]
GPU[1]		: Card SKU: 		D67301V
GPU[1]		: Subsystem ID: 	0x0c34
GPU[1]		: Device Rev: 		0x02
GPU[1]		: Node ID: 		3
GPU[1]		: GUID: 		42924
GPU[1]		: GFX Version: 		gfx23e
==========================================================================================
================================== End of ROCm SMI Log ===================================

PyTorch のインストール

最初に、適当な方法で uv をインストール。最小限の pyproject.toml を用意する。

pyproject.toml
[project]
name = "samplecodes"
version = "0.1.0"
description = "Sample codes to use ROCm"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
]

[[tool.uv.index]]
name = "pytorch-src"
url = "https://download.pytorch.org/whl/rocm6.4"
explicit = true

[tool.uv.sources]
torch = { index = "pytorch-src" }
pytorch-triton-rocm = { index = "pytorch-src" }
}

venv環境を初期化する。

$ uv venv

ここで PyTorch をインストールするために、以下のコマンドを実行してみても、何故か依存関係の解決に失敗する。

$ uv add torch
  No solution found when resolving dependencies:
(snip)

先に、pytorch-triton-rocm をインストールしておくと、うまく PyTorch をインストールできる。

$ uv add pytorch-triton-rocm
$ uv add torch

bitsandbytes のインストール

手順は、HuggingFace の説明の通り。

$ git clone https://github.com/bitsandbytes-foundation/bitsandbytes.git
$ cd bitsandbytes
$ cmake -DCOMPUTE_BACKEND=hip -S .
$ make
$ python3 setup.py bdist_wheel

bitsandbytes/dist/ ディレクトリ配下に whl ファイルができているはずなので、適当な場所に移動する。その上で、以下のコマンドを実行する。

$ uv add bitsandbytes-0.48.2.dev0-cp312-cp312-linux_x86_64.whl

flash-attention のインストール

手順は、基本的には、flash-attention 本家の説明の通り。ただし、以下に留意して修正が必要。

  • ビルド時に torch を参照しているので、仮想環境でビルドスクリプトを実行する必要がある。
  • ビルドスクリプトが pip を参照しているので、仮想環境に pip をインストールしておく必要がある。
$ uv pip install pip
$ git clone https://github.com/Dao-AILab/flash-attention.git
$ cd flash-attention
$ uv run env FLASH_ATTENTION_TRITON_AMD_ENABLE="TRUE" python setup.py bdist_wheel

flash-attention/dist/ ディレクトリ配下に whl ファイルができているはずなので、適当な場所に移動する。その上で、以下のコマンドを実行する。

$ uv add flash_attn-2.8.3-py3-none-any.whl

なお、最近のLLM(例えば,llm-jp-3.1-1.8b)は,flash-attention に依存していることが多い。これらのLLMを実行するときも、FLASH_ATTENTION_TRITON_AMD_ENABLE 環境変数を指定しておかないと、flash-attention が CUDA 用のバックエンドを参照して以下のようなエラーが発生するため、注意が必要。

ModuleNotFoundError: No module named 'flash_attn_2_cuda'

Transformers のインストール

その他、必要なモジュールを追加する。

$ uv add transformers

最終的に、以下のような内容の pyproject.toml が得られるはずである。

pyproject.toml
[project]
name = "samplecodes"
version = "0.1.0"
description = "Sample codes to use ROCm"
readme = "README.md"
requires-python = ">=3.12"
dependencies = [
    "bitsandbytes",
    "datasets>=4.2.0",
    "evaluate>=0.4.6",
    "flash-attn",
    "peft>=0.17.1",
    "pytorch-triton-rocm>=3.4.0",
    "scikit-learn>=1.7.2",
    "torch>=2.8.0",
    "transformers>=4.57.1",
    "xformers>=0.0.32.post2",
]

[[tool.uv.index]]
name = "pytorch-src"
url = "https://download.pytorch.org/whl/rocm6.4"
explicit = true

[tool.uv.sources]
torch = { index = "pytorch-src" }
pytorch-triton-rocm = { index = "pytorch-src" }
xformers = { index = "pytorch-src" }
bitsandbytes = { path = "bitsandbytes-0.48.2.dev0-cp312-cp312-linux_x86_64.whl" }
flash-attn = { path = "flash_attn-2.8.3-py3-none-any.whl" }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?