Ubuntu 22.04 + NVIDIA RTX 5080 でGenesisを実行するまで

## 概要
[Genesis](https://genesis-embodied-ai.github.io/)は、ロボティクス・Embodied AI・Physical AIアプリケーション向けの超高速物理エンジンです。  
ロボットシミュレーションではメジャーなNvidiaの[Issac Lab](https://isaac-sim.github.io/IsaacLab/main/index.html)の前身である[Issac Gym](https://developer.nvidia.com/isaac-gym)の10倍以上のパフォーマンスを発揮できるという、にわかに信じがたい処理速度です。
最近では中国製の四足歩行ロボット：[Unitree Go2](https://www.unitree.com/go2)の歩容の強化学習環境としても利用されているようです。

Uniitree Go2を使った歩容の強化学習のため、昨年度末に購入した下記前提条件のマシンでGenesisの環境を構築しサンプルを実行するまでの手順をまとめました。

:::note alert
環境構築にあたり、重要なデータは事前にバックアップしてください
:::

### 前提条件
- OS : Ubuntu 22.04 LTS
- グラフィックス : NVIDIA® GeForce RTX™ 5080 **<-2025.06.19時点でほぼ最新のGPUなので、下記の手順内でのドライバやライブラリのバージョン指定が非常に重要です。**

以下は今回の環境構築に関係ないですがご参考です。
- CPU : インテル® Core™ Ultra 9 プロセッサー 285K
- RAM : 32GB (16GB×2 / デュアルチャネル)
- ストレージ : 2TB (M.2 SSD NVMe Gen4×4)

### バージョン一覧表(2025.06.19時点)

| ソフトウェア | 必須バージョン | RTX 5080対応状況 | インストールコマンド |
|-------------|---------------|----------------|---------------------|
| NVIDIA Driver | 570.86.16+ | ✅ 対応 | `sudo apt install nvidia-driver-570-open` |
| CUDA | 12.8 | ✅ 対応 | `sudo apt install cuda-toolkit-12-8` |
| cuDNN | 9.8.0 | ✅ 対応 | `sudo apt install libcudnn9-cuda-12` |
| Python | 3.10/3.11推奨 | ✅ 対応 | `sudo apt install python3.11` |
| **PyTorch Stable** | **2.7.1** | **❌ sm_120非対応** | ~~`pip install torch --index-url https://download.pytorch.org/whl/cu128`~~ |
| **PyTorch nightly** | **2.8.0-dev** | **✅ 対応** | **`pip install --pre torch --index-url https://download.pytorch.org/whl/nightly/cu128`** |



:::note warn
## 注意事項

1. **RTX 5080は2025.06.19時点では非常に新しいGPU**で、安定版ソフトウェアではまだ完全にサポートされていません
2. **nightly版使用によるリスク**：開発版のため、予期しない動作やバグが発生する可能性があります
3. **定期的な更新が必要**：ドライバやPyTorchのnightly版は頻繁に更新されるため、定期的なアップデートが推奨されます
4. **本番環境での使用注意**：重要な本番環境での使用前に十分なテストを行ってください
:::


## 手順1: システムの準備

### 1.1 システムの更新
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential dkms
```

### 1.2 Nouveauドライバの無効化
```bash
sudo sh -c "echo 'blacklist nouveau
options nouveau modeset=0' > /etc/modprobe.d/blacklist-nouveau.conf"
sudo update-initramfs -u
```

### 1.3 再起動
```bash
sudo reboot
```

## 手順2: NVIDIA ドライバのインストール

### 方法A: Ubuntuリポジトリから（推奨）

#### 2A.1 restrictedリポジトリの有効化確認
```bash
sudo add-apt-repository universe
sudo apt update
```

#### 2A.2 利用可能なドライバの確認
```bash
ubuntu-drivers devices
```

#### 2A.3 NVIDIA 570ドライバのインストール
```bash
# Open Kernel Modules版（推奨） 私の環境ではこれが有効でした
sudo apt install nvidia-driver-570-open

# または標準版
sudo apt install nvidia-driver-570
```

### 方法B: Graphics-driversタのインストール（代替手段）

```bash
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-570
```

### 2.4 再起動と確認
```bash
sudo reboot
```

再起動後、以下のコマンドでドライバを確認：
```bash
nvidia-smi
```

**期待される出力例**：
```
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 570.144       Driver Version: 570.144       CUDA Version: 12.8 |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 On  |                  N/A |
```

### 2.5 NVIDIA ドライバのトラブルシューティング

#### 2.5.1 "No devices were found" エラー
```bash
# ドライバの再インストール
sudo apt purge nvidia*
sudo apt autoremove
sudo apt install nvidia-driver-570-open   # <- nvidia-smiの結果が出力されるドライバに出会うまで、ubuntu-drivers devices の候補の中から根気強く探し続ける
sudo reboot
```

#### 2.5.2 Open kernel modules必須エラー
RTX 5080では標準のプロプライエタリドライバではなく、Open kernel modulesが必要な場合があります：
```bash
sudo apt install nvidia-driver-570-open
```

## 手順3: CUDA 12.8のインストール

### 3.1 CUDAリポジトリの追加
```bash
# CUDA 12.8リポジトリキーの追加
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
```

### 3.2 パッケージリストの更新
```bash
sudo apt update
```

### 3.3 CUDA 12.8のインストール
```bash
# CUDA 12.8の特定バージョンをインストール
sudo apt install cuda-toolkit-12-8
```

### 3.4 環境変数の設定
```bash
echo 'export PATH=/usr/local/cuda-12.8/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
source ~/.bashrc
```

### 3.5 CUDA動作確認
```bash
nvcc --version
```

**期待される出力**：
```
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on [date]
Cuda compilation tools, release 12.8, V12.8.xxx
```

## 手順4: cuDNNのインストール

### 4.1 cuDNN 9.8のダウンロード
NVIDIAの公式サイトからcuDNN 9.8.0（CUDA 12.8対応）をダウンロード：
```bash
# cuDNN 9.8.0 for CUDA 12.8
wget https://developer.download.nvidia.com/compute/cudnn/9.8.0/local_installers/cudnn-local-repo-ubuntu2204-9.8.0_1.0-1_amd64.deb
```

### 4.2 cuDNNのインストール
```bash
sudo dpkg -i cudnn-local-repo-ubuntu2204-9.8.0_1.0-1_amd64.deb
sudo cp /var/cudnn-local-repo-ubuntu2204-9.8.0/cudnn-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt install libcudnn9-cuda-12
sudo apt install libcudnn9-dev-cuda-12
```

## 手順5: Pythonとpipの準備

### 5.1 Python 3.11のインストール（推奨）
```bash
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.11 python3.11-pip python3.11-dev python3.11-venv
```

### 5.2 仮想環境の作成
```bash
python3.11 -m venv .rtx5080-env
source .rtx5080-env/bin/activate
pip install --upgrade pip
```

## 手順6: PyTorchのインストール

### 6.1 PyTorchのインストール

:::note warn
**重要**：RTX 5080は **Blackwellアーキテクチャ（sm_120）** を使用するため、2025.06.19現在はPyTorch nightly版が必要です。
:::

```bash
# ✅ RTX 5080対応（sm_120サポート）
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

# または特定バージョン（2025.06.19現在）
pip install --pre torch==2.8.0.dev20250605+cu128 torchvision==0.23.0.dev20250605+cu128 torchaudio==2.8.0.dev20250605+cu128 --index-url https://download.pytorch.org/whl/nightly/cu128
```

### 6.2 PyTorch動作確認
```python
python -c "
import torch
print(f'PyTorch version: {torch.__version__}')
print(f'CUDA available: {torch.cuda.is_available()}')
print(f'CUDA version: {torch.version.cuda}')
print(f'Device count: {torch.cuda.device_count()}')
if torch.cuda.is_available():
    print(f'Current device: {torch.cuda.current_device()}')
    print(f'Device name: {torch.cuda.get_device_name(0)}')
"
```

**期待される出力例**：
```
PyTorch version: 2.8.0.dev20250605+cu128
CUDA available: True
CUDA version: 12.8
Device count: 1
Current device: 0
Device name: NVIDIA GeForce RTX 5080
```

:::note alert

**2025.06.19時点ではPyTorch安定版2.7.1にはRTX 5080の互換性問題があります**
```bash
# ❌ PyTorch公式サイトで紹介されている下記の安定版はsm_120非対応のため、RTX 5080では動作しません
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
```

**エラー例**：
```
NVIDIA GeForce RTX 5080 with CUDA capability sm_120 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_50 sm_60 sm_61 sm_70 sm_75 sm_80 sm_86 sm_90.
```
:::


### 6.3 PyTorchのトラブルシューティング

#### 6.3.1 PyTorchでGPUが認識されない
```bash
# CUDAパスの確認
echo $CUDA_HOME
echo $PATH
echo $LD_LIBRARY_PATH

# 環境変数の再設定
export CUDA_HOME=/usr/local/cuda-12.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
```

#### 6.3.2 nightly版の最新バージョンの確認方法
```bash
# 最新のnightly版確認
pip index versions torch --pre --index-url https://download.pytorch.org/whl/nightly/cu128
```

---

## 手順7: Genesisのセットアップ

### 7.1 システム要件とOpenGL依存関係のインストール

#### 7.1.1 必要なシステムパッケージのインストール
```bash
# OpenGLとグラフィック関連ライブラリ
sudo apt update
sudo apt install -y \
    libgl1-mesa-glx \
    libgl1-mesa-dri \
    libegl1-mesa \
    libglib2.0-0 \
    libglfw3 \
    libglfw3-dev \
    freeglut3 \
    freeglut3-dev \
    mesa-utils \
    xvfb
```

#### 7.1.2 OpenGLバージョンの確認
```bash
# OpenGL情報の確認
glxinfo | grep "OpenGL version"
```

**期待される出力例**：
```
OpenGL version string: 4.6.0 NVIDIA 570.144
```
:::note warn
Genesisには OpenGL 4.4以降が必要です。
:::

### 7.1.3 OpenGLのトラブルシューティング
OpenGL情報の確認の結果、

```bash
# OpenGL情報の確認
OpenGL version string: 4.5 (Compatibility Profile) Mesa 23.2.1-1ubuntu3.1~22.04.3
```
となった場合は、(RTX 5080が認識されているにも関わらず)**OpenGLがNVIDIAドライバーではなくMesaを使用しているため、Genesisが正常に動作しません。**
解決方法として、NVIDIA OpenGLドライバーを強制使用するよう環境変数を設定します。

#### 7.1.3.1 NVIDIA OpenGLドライバーを強制使用
```bash
# NVIDIA OpenGLを強制使用する環境変数を設定
export __GL_SYNC_TO_VBLANK=0
export __GL_THREADED_OPTIMIZATIONS=1
export LIBGL_ALWAYS_INDIRECT=0
export __NV_PRIME_RENDER_OFFLOAD=1
export __GLX_VENDOR_LIBRARY_NAME=nvidia

# 環境変数を永続化
echo 'export __GL_SYNC_TO_VBLANK=0' >> ~/.bashrc
echo 'export __GL_THREADED_OPTIMIZATIONS=1' >> ~/.bashrc
echo 'export LIBGL_ALWAYS_INDIRECT=0' >> ~/.bashrc
echo 'export __NV_PRIME_RENDER_OFFLOAD=1' >> ~/.bashrc
echo 'export __GLX_VENDOR_LIBRARY_NAME=nvidia' >> ~/.bashrc
source ~/.bashrc
```

#### 7.1.3.2 NVIDIA Prime設定の確認
```bash
# Prime設定確認
sudo prime-select query

# NVIDIAモードに設定（必要に応じて）
sudo prime-select nvidia

# 設定後は再起動が推奨
sudo reboot
```

#### 7.1.3.3 X11設定の確認
```bash
# X11設定でNVIDIAドライバーが使用されているか確認
cat /var/log/Xorg.0.log | grep -i nvidia

# nvidia-settingsでGPU設定確認
nvidia-settings
```

#### 7.1.3.4 修正後の確認
再起動またはログアウト/ログイン後：
```bash
# OpenGLがNVIDIAドライバーを使用しているか確認
glxinfo | grep -E "(OpenGL vendor|OpenGL renderer|OpenGL version)"

# eglinfo（追加情報）
eglinfo | grep -i nvidia
```

`glxinfo | grep -E "(OpenGL vendor|OpenGL renderer|OpenGL version)"`の期待される出力は以下の通りです
```
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce RTX 5080/PCIe/SSE2
OpenGL version string: 4.6.0 NVIDIA 570.153.02
```

### 7.2 Genesisのインストール

#### 7.2.1 仮想環境の再開
```bash
source .rtx5080-env/bin/activate
```

仮想環境が起動すると、`(.rtx5080-env)`がプロンプトに表示されます。

:::note warn
`deactivate`を実行すると仮想環境を終了できますが、以降、Genesisを使いたい場合、必ず仮想環境を起動してください。
:::

#### 7.2.2 Genesisのインストール
```bash
# Genesis物理エンジンのインストール
pip install genesis-world

# 追加の依存関係（画像処理・可視化用）
pip install opencv-python matplotlib imageio imageio-ffmpeg
```

### 7.3 環境変数の設定（必要に応じて）

**レンダリング最適化**
```bash
# NVIDIA GPU環境での最適化
export LIBGL_ALWAYS_INDIRECT=0
export MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA

# 環境変数を永続化
echo 'export LIBGL_ALWAYS_INDIRECT=0' >> ~/.bashrc
echo 'export MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA' >> ~/.bashrc
source ~/.bashrc
```

### 7.4 サンプルコードによる基本動作確認

#### 7.4.1 基本サンプルコード作成・実行
```bash
# サンプルコード用ディレクトリ作成
mkdir ~/genesis_test
cd genesis_test
```

**次のコードを `hello_genesis.py` として作成：**

```python:hello_genesis.py
import genesis as gs

# Genesis初期化（GPU使用）
print("Initializing Genesis...")
gs.init(backend=gs.gpu)  # RTX 5080の場合はGPUを使用

# シーンの作成
print("Creating scene...")
scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        dt=0.01,
        gravity=(0, 0, -9.81),
    ),
    show_viewer=True,  # ビューワー表示
    viewer_options=gs.options.ViewerOptions(
        camera_pos=(3.5, 0.0, 2.5),
        camera_lookat=(0.0, 0.0, 0.5),
        camera_fov=40,
    ),
)

# 物体の追加
print("Adding objects...")
plane = scene.add_entity(gs.morphs.Plane())
box = scene.add_entity(
    gs.morphs.Box(
        pos=(0, 0, 2.0),
        size=(0.2, 0.2, 0.2),
    )
)

# シーンの構築
print("Building scene...")
scene.build()

print("Starting simulation...")
print("RTX 5080 GPU Performance Test - Simulating falling box")

# シミュレーション実行
for i in range(1000):
    scene.step()
    if i % 100 == 0:
        print(f"Step {i}/1000")

print("Simulation completed!")
```

**`hello_genesis.py`の実行：**
```bash
cd genesis_test
python hello_genesis.py
```

**期待される動作**：
1. ウィンドウが開く
2. 床の上に箱が落下するシミュレーション
3. リアルタイムでの物理演算表示
4. RTX 5080での超高速処理

#### 7.4.2 ロボットアームサンプル

より高度なサンプルとして、Frankaロボットアームのシミュレーション：

```python:robot_arm_test.py
import genesis as gs

# Genesis初期化
gs.init(backend=gs.gpu)

# シーン作成
scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        dt=0.01,
        gravity=(0, 0, -9.81),
    ),
    show_viewer=True,
)

# 床とロボットアームの追加
plane = scene.add_entity(gs.morphs.Plane())
franka = scene.add_entity(
    gs.morphs.MJCF(file='xml/franka_emika_panda/panda.xml'),
)

# シーン構築
scene.build()

print("RTX 5080 Robot Arm Simulation - Press Ctrl+C to stop")

# 重力による自由落下シミュレーション
try:
    for i in range(5000):
        scene.step()
        if i % 500 == 0:
            print(f"Simulated {i} steps")
except KeyboardInterrupt:
    print("Simulation stopped by user")
```

#### 7.4.3 液体・弾性体・砂のシミュレーション
```python:material_simulation.py
# 異なるMPM材料タイプの比較
import genesis as gs

gs.init(backend=gs.gpu)

# MPMソルバーの設定を含むシーンを作成
scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        dt=4e-3,
        substeps=10,
    ),
    mpm_options=gs.options.MPMOptions(
        lower_bound=(-2.0, -1.0, 0.0),
        upper_bound=(2.0, 1.0, 2.0),
        particle_size=0.02,
    ),
    vis_options=gs.options.VisOptions(
        visualize_mpm_boundary=True,
    ),
    show_viewer=True
)

# 床となる平面を追加
plane = scene.add_entity(
    morph=gs.morphs.Plane(),
)

# 1. 液体（Liquid）
liquid = scene.add_entity(
    material=gs.materials.MPM.Liquid(),
    morph=gs.morphs.Box(
        pos=(-1.2, 0, 1.0),
        size=(0.3, 0.3, 0.3),
    ),
    surface=gs.surfaces.Default(
        color=(0.4, 0.8, 1.0),
        vis_mode='particle',
    ),
)

# 2. 弾性体（Elastic）
elastic = scene.add_entity(
    material=gs.materials.MPM.Elastic(),
    morph=gs.morphs.Box(
        pos=(0.0, 0, 1.0),
        size=(0.3, 0.3, 0.3),
    ),
    surface=gs.surfaces.Default(
        color=(1.0, 0.4, 0.4),
        vis_mode='particle',
    ),
)

# 3. 砂（Sand）
sand = scene.add_entity(
    material=gs.materials.MPM.Sand(),
    morph=gs.morphs.Box(
        pos=(1.2, 0, 1.0),
        size=(0.3, 0.3, 0.3),
    ),
    surface=gs.surfaces.Default(
        color=(0.8, 0.6, 0.2),
        vis_mode='particle',
    ),
)

print("左から右へ:")
print("青: 液体（Liquid）- 流体として振る舞う")
print("赤: 弾性体（Elastic）- 変形するが元の形に戻ろうとする") 
print("黄: 砂（Sand）- 顆粒材料として振る舞う")

scene.build()
for i in range(3000):
    scene.step()
```

#### 7.4.4 異なる表示モードで水の動きを比較

:::note warn
[splashsurf](https://github.com/InteractiveComputerGraphics/splashsurf)を利用してサーフェス再構築を行い、よりリアルな水の動きを再現しますが、2025.06.19時点ではsplashsurfはCPUを使った処理でGPUを使用しないため、fpsが低下します。
:::

事前に`Rust`をインストールしビルドシステム兼パッケージマネージャの`cargo`をセットアップしたうえで、`splashsurf`のインストールが必要です。
```
# アーキテクチャを確認
uname -m

# x86_64の場合
wget https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init -O /tmp/rustup-init

# 実行権限を付与して実行
chmod +x /tmp/rustup-init
/tmp/rustup-init

# Rust環境を読み込み
source ~/.cargo/env

# バージョンを再確認
rustc --version
cargo --version

# splashsurfをインストール
cargo install splashsurf
```


```python:water_sim.py
# 水の異なる表示モード比較
import genesis as gs

gs.init(backend=gs.gpu)

# MPMソルバーの設定を含むシーンを作成
scene = gs.Scene(
    sim_options=gs.options.SimOptions(
        dt=4e-3,
        substeps=10,
    ),
    mpm_options=gs.options.MPMOptions(
        lower_bound=(-2.0, -1.0, 0.0),
        upper_bound=(2.0, 1.0, 2.0),
        particle_size=0.02,
    ),
    vis_options=gs.options.VisOptions(
        visualize_mpm_boundary=True,
    ),
    show_viewer=True
)

# 床となる平面を追加
plane = scene.add_entity(
    morph=gs.morphs.Plane(),
)

# 1. 粒子表示モード（particle）
water_particle = scene.add_entity(
    material=gs.materials.MPM.Liquid(),
    morph=gs.morphs.Box(
        pos=(-0.8, 0, 1.0),
        size=(0.3, 0.3, 0.3),
    ),
    surface=gs.surfaces.Default(
        color=(0.4, 0.8, 1.0),
        vis_mode='particle',
    ),
)

# 2. 再構成表示モード（recon）- より滑らかな表面
water_recon = scene.add_entity(
    material=gs.materials.MPM.Liquid(),
    morph=gs.morphs.Box(
        pos=(0.8, 0, 1.0),
        size=(0.3, 0.3, 0.3),
    ),
    surface=gs.surfaces.Default(
        color=(0.2, 0.6, 0.9),
        vis_mode='recon',
    ),
)

print("左側: 粒子表示モード（particle）")
print("右側: 再構成表示モード（recon）")
print("reconモードでは、より滑らかで連続的な液体表面が表示されます")

scene.build()
for i in range(2000):
    scene.step()
```

#### 7.4.5 FPS測定サンプル(パフォーマンス確認)


```python:performance.py
import genesis as gs
import time

gs.init(backend=gs.gpu)

scene = gs.Scene(show_viewer=False)  # ビューワー無しで最大性能測定
plane = scene.add_entity(gs.morphs.Plane())
box = scene.add_entity(gs.morphs.Box(pos=(0, 0, 1.0)))

scene.build()

print("RTX 5080 Performance Benchmark")
print("Simulating 10000 steps...")

start_time = time.time()
steps = 10000

for i in range(steps):
    scene.step()

end_time = time.time()
total_time = end_time - start_time
fps = steps / total_time

print(f"Completed {steps} steps in {total_time:.2f} seconds")
print(f"Performance: {fps:.0f} FPS")
print(f"Speed multiplier: {fps:.0f}x real-time (assuming 60 FPS)")
```

**期待される性能**：正しくセットアップできていれば、RTX 5080では数百万〜数千万FPS出ます。すごい！😲

#### 7.4.6 Genesisのバージョンと機能確認

```python:genesis.ver.py
import genesis as gs

# バージョン確認
print(f"Genesis version: {gs.__version__}")

# 利用可能なバックエンド確認
print("Available backends:")
print(f"CPU: {gs.cpu}")
print(f"GPU: {gs.gpu}")

# RTX 5080の情報表示
gs.init(backend=gs.gpu)
print("Genesis initialized successfully with RTX 5080!")
```

### 7.5 Genesisのトラブルシューティング

#### 7.5.1 OpenGLエラー
```bash
# エラー例
# OpenGL.error.GLError: GLError(err = 1282, description = b'invalid operation')

# 解決策：OpenGLドライバの確認
nvidia-smi
glxinfo | grep "OpenGL"

# ドライバ再インストール
sudo apt install --reinstall nvidia-driver-570-open
```

#### 7.5.2 ビューワーが表示されない（headless環境）
```python
# ビューワー無しモード
scene = gs.Scene(show_viewer=False)

# 画像として保存
import cv2
rgb_array = scene.render(camera=scene.main_camera)
cv2.imwrite('simulation_frame.png', rgb_array)
```

#### 7.5.3 Taichi/GLFW競合エラー
```bash
# 依存関係の再インストール
pip uninstall taichi genesis-world
pip install genesis-world
```

---

## 手順8: TechShareで紹介されている`Genesis-Embodied-AI/Genesis.git`の環境構築手順(2025.06.19時点の手順)
Genesisのサンプルとしても用意されている[Unitree Go2](https://techshare.co.jp/product/unitree/go2/)の日本代理店でもあるTechShareで[【深層強化学習】Genesisのインストール手順](https://techshare.co.jp/faq/unitree/install_genesis.html)として紹介されていますが、この記事は2025.01.31時点の内容です。
アップデートにより2025.06.19時点ではそのままではエラーになる箇所があるので、以下で修正版の手順を紹介します。

:::note info
[7.2.1 仮想環境の再開](#721-仮想環境の再開)までは共通です。以降の手順は下記に沿ってください。
:::

### 8.1 Genesisをクローンする

まず、[Genesis-GitHub](https://github.com/Genesis-Embodied-AI/Genesis)をクローンします。

```bash
git clone https://github.com/Genesis-Embodied-AI/Genesis.git
cd Genesis
```

### 8.2 Genesis-worldをインストール

```bash
pip install genesis-world
```

### 8.3 Genesisで`pip install -e .`を実行

```bash
pip install -e .
```

### 8.4 RSL RL ライブラリのインストール（重要！）

**⚠️ 元の手順では古いバージョンを使用していますが、最新のGenesisでは以下が必要です。**

```bash
# 新しい方法（推奨）：
pip install tensorboard rsl-rl-lib==2.2.4

# 以下はTechShareのサイトで紹介されている古い方法なので、使用しないでください：
# git clone https://github.com/leggedrobotics/rsl_rl
# cd rsl_rl
# git checkout v1.0.2
# pip install -e .
```

### 8.5 RTX 5080/5090用の事前対策

新しいGPUでは、Taichiキャッシュが問題を起こす可能性があります。事前にクリアしておきます。

```bash
# Taichiキャッシュをクリア
rm -rf ~/.taichi/
rm -rf ~/.cache/taichi/
```

### 8.6 サンプルコードの実行

#### 8.6.1 基本的な学習の実行

```bash
source .rtx5080-env/bin/activate  # 仮想環境を起動
cd Genesis  # Genesisのルートディレクトリに移動

# RTX 5080/5090の場合、まずは小さなバッチサイズから開始
python examples/locomotion/go2_train.py -B 1024 --max_iterations 100

# 他のGPUの場合
python examples/locomotion/go2_train.py -B 4096 --max_iterations 100
```

#### 8.6.2 TensorBoardで学習状況を確認

**別のターミナルを開いて実行:**

```bash
cd Genesis
source .rtx5080-env/bin/activate

# TensorBoardを起動
python -m tensorboard.main --logdir logs --port 6006
```

ブラウザで `http://localhost:6006` にアクセスして学習状況を確認できます。

#### 8.6.3 訓練したモデルの確認

学習完了後、訓練したモデルでGo2の歩容を確認します。

```bash
python examples/locomotion/go2_eval.py
```

### 8.7 `Genesis-Embodied-AI/Genesis.git`のトラブルシューティング

#### 8.7.1 `ImportError: Please uninstall 'rsl_rl' and install 'rsl-rl-lib==2.2.4'.`

**解決方法:**
```bash
pip uninstall rsl_rl
pip install rsl-rl-lib==2.2.4
```

#### 8.7.2 `RuntimeError: normal expects all elements of std >= 0.0`

**原因:** 学習パラメータが不安定
**解決方法:** `go2_train.py`の学習設定を調整

```python
# go2_train.py内の以下の値を変更：
"learning_rate": 0.0003,  # 元の0.001から変更
"init_noise_std": 0.1,    # 元の1.0から変更
```

#### 8.7.3 `CUDA Error CUDA_ERROR_ILLEGAL_ADDRESS` (RTX 5080/5090)

**原因:** RTX 5000シリーズでのTaichiキャッシュ問題
**解決方法:**
```bash
# Taichiキャッシュをクリア
rm -rf ~/.taichi/
rm -rf ~/.cache/taichi/

# 再実行
python examples/locomotion/go2_train.py -B 1024
```

#### 8.7.4 `PyTorch CUDA capability sm_120 is not compatible`

**原因:** RTX 5080/5090でPyTorchの互換性問題。[6.1 PyTorchのインストール](#61-PyTorchのインストール)を参照

**解決方法:**
```bash
# 古いPyTorchをアンインストール
pip uninstall torch torchvision torchaudio

# RTX 5080対応（sm_120サポート）のPyTorch nightly	2.8.0-devをインストール
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

# もしくは下記バージョンをインストール
pip install torch==2.7.0 --index-url https://download.pytorch.org/whl/cu128
pip install torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
```

#### 8.7.5 `tensorboard: command not found`

**解決方法:**
```bash
# 以下のコマンドで実行
python -m tensorboard.main --logdir logs
```

#### 8.7.6 メモリ不足エラー

**解決方法:** バッチサイズを減らす
```bash
# バッチサイズを段階的に減らして試す
python examples/locomotion/go2_train.py -B 512
python examples/locomotion/go2_train.py -B 256
python examples/locomotion/go2_train.py -B 64
```

#### 8.7.7 Go2が動かない・不安定

**解決方法:** より保守的な学習設定を使用
```bash
# 小さなバッチサイズと短い学習時間で確認
python examples/locomotion/go2_train.py -B 512 --max_iterations 50
```

### 8.8 推奨される実行手順

#### 8.8.1 RTX 5080/5090の場合

事前準備
```bash
rm -rf ~/.taichi/ ~/.cache/taichi/
source .rtx5080-env/bin/activate
```

小さなバッチサイズで動作確認
```bash
python examples/locomotion/go2_train.py -B 512 --max_iterations 10
```

正常動作を確認後、本格的な学習
```bash
python examples/locomotion/go2_train.py -B 2048 --max_iterations 500
```

#### 8.8.2 その他のGPUの場合

```bash
source .[仮想環境名]/bin/activate
python examples/locomotion/go2_train.py -B 4096 --max_iterations 500
```


## 参考情報

- [NVIDIA Blackwell RTX GPU Migration Guide](https://forums.developer.nvidia.com/t/software-migration-guide-for-nvidia-blackwell-rtx-gpus-a-guide-to-cuda-12-8-pytorch-tensorrt-and-llama-cpp/321330)
- [PyTorch nightly builds](https://download.pytorch.org/whl/nightly/cu128/)
- [CUDA 12.8 Documentation](https://docs.nvidia.com/cuda/)
- [【深層強化学習】Genesisのインストール手順
](https://techshare.co.jp/faq/unitree/install_genesis.html)
- [Genesis 🛠️ インストール方法](https://genesis-world.readthedocs.io/ja/latest/user_guide/overview/installation.html)