1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LBM流体解析ツールXLBの活用【07:Warp導入方法と動作確認】

1
Last updated at Posted at 2026-09-30

この文書では、WSL2のUbuntu24.04上でLBM(格子ボルツマン法)流体解析ツールXLBを活用する方法を紹介します。

「XLB(Accelerated Lattice Boltzmann)」は、Autodeskが公開している、GPUによる高速計算と機械学習との連携を重視したPython製LBM(格子ボルツマン法)ライブラリです。2次元・3次元の流体解析に対応し、標準的なBGKモデルや高レイノルズ数流れに適したKBCモデルなどを利用できます。
最大の特徴は、NVIDIA Warp、JAX、Neonなどの計算バックエンドを利用できる点です。特にWarpを用いることで、PythonコードからGPUを活用した高速なLBM計算を比較的容易に実装できます。
また、計算過程を微分可能(Differentiable) に設計しているため、流体解析と深層学習を組み合わせたPhysicsML(Physics-based Machine Learning)、形状最適化、逆問題などへの応用も期待されています。
さらに、大規模GPU計算、マルチGPU、格子細分化にも対応しており、従来の「流体を計算するだけのLBMソフトウェア」ではなく、高速CFDとAI・機械学習を統合する次世代型のLBM基盤として位置付けられます。
Pythonベースで拡張しやすいため、LBMの学習から先端的なPhysics AI研究まで幅広く活用できるライブラリです。

XLB公式サイト:https://www.research.autodesk.com/publications/xlb-differentiable-massively-parallel-lattice-boltzmann-library-python/
XLB公式GitHubリポジトリ

XLBのバックエンド

ここでの検証では、バックエンドとして 【NVIDIA Warp】 を活用します。これは、NVIDIAが開発したGPU向け高速計算フレームワークです。Pythonに似た記述でプログラムを作成でき、CPUだけでなくGPU上で大規模な並列計算を効率よく実行できます。
物理シミュレーション、ロボティクス、流体解析、構造解析、機械学習などを主な対象としています。最大の特徴は、Pythonの使いやすさとGPU計算の高速性を両立している点です。
また、自動微分にも対応しており、物理シミュレーションとAIを組み合わせたPhysics AIの開発にも活用できます。XLBではWarpを計算バックエンドとして利用することで、格子ボルツマン法による流体解析をGPU上で高速に実行できます。

NVIDIA Warp公式サイト:https://developer.nvidia.com/warp-python
XLB公式GitHubリポジトリ

XLBのバックエンドとしてのWarp

このXLBは、格子ボルツマン法の高速数値計算のために、いくつかのバックエンドが利用可能です。「NVIDIA Warp・Google JAX・Autodesk Neon」が利用可能です。

【NVIDIA Warpバックエンド】

NVIDIA GPU上で高速にLBM計算を実行することを重視したバックエンドです。NVIDIA Warpは、Python風のコードからGPU並列計算を記述できるフレームワークです。XLBでは、LBMのCollisionやStreamingなどの処理をGPUカーネルとして効率的に実行します。

特徴としては、
NVIDIA GPUに特化  単一GPUで非常に高い性能  PythonベースでGPUプログラムを記述可能  物理シミュレーションとの親和性が高い  CFD計算を高速に実行可能

特に、「まず高速なLBM流体解析をGPUで実行したい」という目的には、Warpバックエンドが最も扱いやすい選択肢です。XLB公式READMEでもWarpは高性能な単一GPU計算向けとして位置付けられています。

【3つのバックエンドの比較】

image.png

本検証でXLBでWarpを選択するポイントは、LBMによる流体計算をNVIDIA GPU上で高速に実行したい場合です。WarpはNVIDIAが開発したGPU向け計算基盤で、物理シミュレーションに適した高速な数値計算を実行できます。特に、AIとの連携や自動微分を主目的とせず、まずはLBMの計算速度を高めたい場合に適しています。XLBでは、Warpを利用することでPythonベースのプログラムからGPU計算を利用できるため、GPUを活用した流体解析を比較的シンプルに構築できます。単一のNVIDIA GPUで高速なLBM計算を行うことが、Warpを選ぶ大きなポイントです。

NVIDIA Warpの概要

NVIDIA Warpは、NVIDIAが開発した、GPUを活用した高速なシミュレーション、ロボティクス、機械学習のためのPythonオープンソースフレームワークです。

NVIDIA Warp公式ドキュメント
NVIDIA Warp公式GitHubリポジトリ

主な特徴

  • PythonによるGPUプログラミング: Pythonで記述した関数を、JITコンパイルによってCPUやNVIDIA GPU上で実行可能な高速なカーネルに変換できます。

  • 物理シミュレーションに対応: 流体、有限要素法(FEM)、粒子法、剛体、接触、形状処理など、物理シミュレーションに利用できる機能が用意されています。

  • 自動微分に対応: Warpのカーネルは微分可能であり、物理シミュレーションと機械学習を組み合わせた微分可能シミュレーションに利用できます。PyTorchやJAXなどの機械学習フレームワークとの連携も可能です。

  • CPU・GPUで実行可能: 同じWarpプログラムをCPUまたはNVIDIA GPU上で実行できます。GPUではCUDAを利用して、大規模な並列計算を高速に実行できます。:chatgpt-content-reference{index="3"}

  • CUDAに近い並列計算モデル: @wp.kernelで計算カーネルを定義し、wp.launch()によって多数のスレッドを並列実行します。そのため、PythonからCUDAに近いGPU並列計算を記述できます。:chatgpt-content-reference{index="4"}

詳細なドキュメントやチュートリアルは、NVIDIA Warp公式ページから確認できます。

XLBとの関係で見ると、JAXが「数値計算・自動微分・XLAによる最適化」を中心とするのに対し、Warpは「GPUカーネル・物理シミュレーション・微分可能シミュレーション」を中心とするフレームワークと整理すると分かりやすいです。

XLB-Warpの動作環境

まず初めに、ここで取り組むXLBの動作環境の概要を示しておきます。

Windows 11
 ├─ NVIDIA Driver
 └─ WSL2 (Ubuntu 24.04LTS)
    ├─ NVIDIA GPU (CUDA)
    └─ Python 仮想環境 (XLBwarp)
       ├─ NVIDIA Warp
       │  └─ GPU高速計算
       └─ XLB
          └─ Lattice Boltzmann Method

XLB の Warp バックエンドは、特に単一GPUで高速なLBM計算を行う用途に適しています。複数GPUの活用では、JAX,Neonを利用します。

ここでは、Windowsで手軽に利用できるUbuntu環境として、「WSL2上のUbuntu24.04LTS」を用いることにして、ここに、XLB+JAX用のPython環境を作ることにします。
このUbuntuでは、WindowsのGPUドライバを利用して、WSL上のUbuntuでGPUを利用可能になります。改めてUbuntuにGPUドライバを導入する必要はありません。

XLB公式GitHubリポジトリの説明を見ると、Installationは、Pythonのpipを用いて簡単にできるようです。指定した環境というより、適切なPythonが動作していれば良いと思いました。むしろ、バックエンドに何を利用するかで、動作環境が選定されます。

はい。提示いただいた 「バックエンドJAXの条件」から「バックエンドWarpの条件」へ置き換えるのであれば、次のように整理するとよいです。

なお、現在のWarp公式情報では、Warpは Python 3.10以上、Linux/Windows x86-64などをサポートし、CUDA GPUでは世代・ドライバ条件があります。XLB公式もWarpを単一GPU向けバックエンドとして案内しています。:chatgpt-content-reference{index="0"}

バックエンドWarpの条件

【対応オペレーティングシステム(OS)とアーキテクチャ】

NVIDIA Warpは、PythonからCPUまたはNVIDIA GPU上で実行できるGPUコンピューティング・フレームワークです。公式のwarp-langパッケージは、Windows(x86-64)、Linux(x86-64およびAArch64)、macOS(Apple Silicon)向けに提供されています。WindowsおよびLinuxでは、CPU実行に加えてCUDAによるNVIDIA GPU実行に対応しています。:chatgpt-content-reference{index="1"}

  • Windows: x86_64
  • Linux: x86_64、AArch64
  • macOS: Apple Silicon(CPU実行)

NVIDIA GPUを利用する場合は、LinuxまたはWindows環境が適しています。特に、XLBのLBM計算をNVIDIA GPUで実行する場合は、LinuxまたはWSL2上のLinux環境を利用する構成が扱いやすいです。

【推奨されるGPUハードウェアスペック】

WarpをNVIDIA GPUで利用する場合、必要なGPU性能は、シミュレーションの規模や計算内容によって変わります。

  • 基本利用(プロトタイプ・小規模計算): NVIDIA CUDA対応GPU
  • 高度な利用(LBM・物理シミュレーションなど): VRAM 16GB以上を推奨
  • 大規模計算: VRAM 24GB以上が望ましく、複数GPUを利用する場合はGPU間通信性能も重要
  • GPUアーキテクチャ: 現行のCUDA 13対応Warpでは、Compute Capability(SM)7.5以上のNVIDIA GPUが必要
  • GPUメモリ: 計算格子、粒子数、配列数などによって必要なVRAM容量が大きく変化する

現在のWarp公式のPyPI版はCUDA Toolkit 13.4を使用し、CUDA実行には NVIDIA R580系以上のドライバとTuring(SM 7.5)以上のGPUが必要とされています。

ただし、VRAM 16GBや24GBという区分はWarpの公式最低要件ではありません。 これらは、XLBによるLBMや科学技術計算を実用的に行う場合の目安です。

例えば、今回使用している RTX A4500(20GB、SM 8.6) は、このGPUアーキテクチャ条件を満たします。

【ソフトウェア環境の条件】

  • Pythonバージョン: Warpは Python 3.10以上を要求します。現在の環境ではPython 3.12が利用できます。:chatgpt-content-reference{index="3"}
  • CUDA: NVIDIA GPUを利用する場合はCUDA対応環境が必要です。ただし、Warpの事前ビルド済みwheelを利用する場合、システムにCUDA Toolkitを別途インストールする必要はありません。 Warpに必要なCUDAコンポーネントはwheelに含まれています。:chatgpt-content-reference{index="4"}
  • NVIDIA Driver: 使用するWarpのCUDAバージョンに対応したNVIDIAドライバが必要です。
  • Linux: x86-64またはAArch64に対応しています。
  • Windows: x86-64に対応しています。

XLB+Warpのバージョン対応

今回の 「XLB+Warp」 の組み合わせでは、次の構成を想定します。

ソフト 推奨・使用バージョン 備考
Python 3.12 今回のvenv環境に適している
XLB リポジトリから導入 例題との対応を考慮
Warp 1.14.0 今回は互換性を考慮して固定
warp-lang 1.14.0 WarpのPythonパッケージ
NumPy XLB/Warpが要求する版 pipに任せる
backend Warp XLB側
device GPU NVIDIA CUDA GPU

特にXLBでは、Warpバックエンドは単一GPUでの高速なLBM計算を目的としたバックエンドとして位置付けられています。

今回の構成を一言でまとめると

これまでの記事【01, 03, 05】を踏まえて、今回は、 「XLBはGitHubリポジトリから例題対応を考慮して導入し、WarpはXLBのWarpバックエンドを有効にしたうえで、Warp 1.14.0に固定して導入し、単体NVIDIA GPUで実行する計算環境」 を作りたいと思います。

動作環境Ubuntu-24.04-XLBwarpの準備

ここでは、WindowsのGPUドライバが利用できるUbuntu環境として、「WSL2上のUbuntu24.04LTS」を用いることにして、ここに、XLB+Warp用のPython環境を作ることにします。

初めて取り組む方は、以下の手順でWSL2上にUbuntu24.04を、導入してください。

WSL2上に複数のUbuntu24.04を利用する場合には、基盤となるUbuntuを導入して、これをexportしてから、目的の環境としてimportします。具体的な以下の手順で行います。環境名としては「Ubuntu-24.04-XLBwarp」とします。

PS C:\Users\ryos> wsl --import Ubuntu-24.04-XLBwarp .\WSL2VM\Ubuntu-24.04-XLBwarp .\Ubuntu-24.04-Base.tar
この操作を正しく終了しました。

PS C:\Users\ryos> wsl -l -v
  NAME                         STATE           VERSION
* Ubuntu-24.04                 Stopped         2
  Ubuntu-24.04-XLBwarp         Stopped         2

Ubuntu環境を起動して、最新に更新しておきます。バージョンを最新「24.04.3⇒24.04.5」にしておきます。

PS C:\Users\ryos> wsl -d Ubuntu-24.04-XLBwarp
ryos@dalab2403sv01:/mnt/c/Users/ryos$

ryos@dalab2403sv01:/mnt/c/Users/ryos$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.3 LTS
Release:        24.04
Codename:       noble

ryos@dalab2403sv01:/mnt/c/Users/ryos$ sudo apt update
[sudo] password for ryos:
:
ryos@dalab2403sv01:/mnt/c/Users/ryos$ sudo apt upgrade
:

ryos@dalab2403sv01:/mnt/c/Users/ryos$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.5 LTS
Release:        24.04
Codename:       noble

GPU環境の確認

XLBのバックエンドとして用いるNVIDIA Warpは、NVIDIA GPUの活用が前提となります。どの程度のGPUが必要か調べたのですが、公式ドキュメントにはそれらしい記述がありませんでした。
そこで、Googleの生成AIの答えを引用すると、以下の通りです。

【必要なGPUスペック】

区分 必要な条件(おすすめのGPU)
最低動作環境 GeForce GTX 900 シリーズ以上(公式最小要件)※CUDAが動作するNVIDIA製GPUであれば基本動作します。
個人開発・推奨環境 GeForce RTX 30シリーズ / 40シリーズ / 50シリーズ(例:RTX 3060, RTX 4070, RTX 5060 など)※VRAM(ビデオメモリ)は 8GB以上 を強く推奨。
研究・エンタープライズ環境 NVIDIA A100 / H100 / L4 / Hopper・Blackwell世代※大規模な物理シミュレーションやロボティクス強化学習向け。

これらGPUの選択において、「VRAM(ビデオメモリ)の容量」が重要です。
NVIDIA Warpは3D空間の物理シミュレーション(粒子、布、剛体など)やロボティクスの学習(Isaac Labなど)で使われます。
扱うオブジェクトの数や解像度が増えるほど大量のVRAMを消費するため、グラフィックボードを選ぶ際はVRAM容量(最低8GB、できれば12GB以上)を重視してください。
なお、NVIDIA WarpはGPUが手元にない環境でも、自動的にCPU(x86-64 / ARMv8)を使って動作する設計になっています(ただし速度は大幅に低下します)。

このGPUを活用するためのドライバは、以下の条件があります。
CUDA Requirements

Warp packages built with CUDA Toolkit 12.x require NVIDIA driver 525 or newer.
Warp packages built with CUDA Toolkit 13.x require NVIDIA driver 580 or newer.

今回のWSL上のUbuntuでは、Windowsに導入したGPUドライバが、そのまま利用できます。Windowsの場合は、以下の状態です。
image.png

この検証で用いるWSL上のUbuntuにおいて、GPUの状態コマンドnvidia-smiで確認します。最近の環境であれば、「CUDA Toolkit 13.x」を利用することになります。

dalab@dalab2312nb01:~$ nvidia-smi
Sat Sep 12 14:21:09 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.58.02              Driver Version: 595.97         CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3070 ...    On  |   00000000:01:00.0 Off |                  N/A |
| N/A   51C    P0             25W /   85W |       0MiB /   8192MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------

この結果を見ると、以下のことが分かります。
・Driver Version: 595.97: GPUドライバがバージョン595.97です。最新ではないですが、このPCではNVIDIA Isaac Sim/Labを利用するために、指定バージョンのGPUドライバを導入しています。
・CUDA Version: 13.2: CUDAが13.xになりますので、GPUドライバが580以上となるので、対応しています。
・NVIDIA GeForce RTX 3070: GPUはタスクマネージャーの確認では、「NVIDIA GeForce RTX 3070 Ti Laptop」となっており、WSL上のUbuntuで正しく認識されています。なお、このGPUはVRAMが8GBであり、最低限の仕様です。

Python環境の確認と準備

以下のNVIDIA WarpのInstall説明を見ると、「Warp requires Python 3.10 or newer.」となっています。つまりバージョン3.10以上が必要です。
https://github.com/NVIDIA/warp/blob/main/README.md#installing

ここで用いるUbunut24.04では、以下の通り「3.12.3」で対応しています。
現在のPythonは、ほぼバージョン3を利用しますが、この状態だとコマンド「python3」と入力します。これを「python」だけで起動できる設定にしておきます。またPython3.12で仮想環境を作るツールも導入します。
さらに導入で用いるpipを更新しておきます。

ryos@dalab2403sv01:~$ python3 --version
Python 3.12.3

ryos@dalab2403sv01:~$ sudo apt install python-is-python3
:
ryos@dalab2403sv01:~$ python --version
Python 3.12.3

ryos@dalab2403sv01:~$ sudo apt install python3.12-venv
:

ryos@dalab2403sv01:~$ sudo apt install python3-pip
:
ryos@dalab2403sv01:~$ pip --version
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)

ryos@dalab2403sv01:~$ pip install --upgrade pip
:
ryos@dalab2403sv01:~$ pip --version
pip 26.2.1 from /home/dalab/XLBwarp/lib/python3.12/site-packages/pip (python 3.12)

準備として、まずWarpを用いたXLBのファイルを保存する作業ディレクトリ「~/XLBwarpWork」を作ります。
次に、Pythonの利用において、目的に応じて仮想環境「XLBwarp」を作って行うことにします。以下のように準備し有効にすると、プロンプトの表示が変わります。

ryos@dalab2403sv01:~$ cd
ryos@dalab2403sv01:~$ ls
ryos@dalab2403sv01:~$ mkdir XLBwarpWork
ryos@dalab2403sv01:~$ ls
XLBwarpWork
ryos@dalab2403sv01:~$ python -m venv XLBwarp
ryos@dalab2403sv01:~$ ls
XLBwarp  XLBwarpWork

ryos@dalab2403sv01:~$ source ~/XLBwarp/bin/activate
(XLBwarp) ryos@dalab2403sv01:~$

NVIDIA Warpの導入と確認

以上の準備で、以下の手順の通り、NVIDIA Warpを、pipでインストールできます。Python仮想環境「XLBwarp」の有効になった状態で、以下のように行います。
さらに導入確認で、バージョンを確認してから、WarpがGPUを認識するかを確認します。
https://nvidia.github.io/warp/v1.17/user_guide/installation.html#installation

この内容は、安定版最新1.17の手順であり、左上のバージョンを選択するメニューを見ると、1.18(prerelease)を含め古いバージョンも選択できます。
実は、以下のXLB導入手順のQiita記事には、「追記:CUDAエラーが発生した場合は、JAXはバージョン0.10.1、WARPはバージョン1.14.0にダウングレード推奨」 と書かれています。たぶんは、現在のXLBとの対応で1.14.0では適用するが、最新の1.17.0では未対応なのかもです。
https://qiita.com/Nagoyan/items/72a494c2af04d076438d

しかし、この「バージョン1.14.0」にしても、Warp 1.14.0では、XLBが使用する古いAPIのwp.mat()が利用できなくなっており、rotating_sphere_3d.py実行時にエラーになります。一方、Warp 1.10.0ではwp.mat()が利用できるため、XLBの現在のWarpバックエンドと互換性があります。
つまり、XLBの依存条件warp-lang>=1.10.0は「1.10以降なら全て動作する」という意味ではなく、XLBのAPIとWarpのバージョン間に互換性の問題があるためです。特定の例題に関しては「バージョン1.10.0」が必要になります。

そこで本検証では、バージョン1.14.0を指定して導入する手順を試みます。Python仮想環境「XLBwarp」の状態で、pipを用いて導入します。続いて、warpのバージョンと、gpuの認識を確認します。

(XLBwarp) ryos@dalab2403sv01:~$ pip install "warp-lang==1.10.0"
Collecting warp-lang==1.10.0
:
Installing collected packages: numpy, warp-lang
Successfully installed numpy-2.5.3 warp-lang-1.10.0

(XLBwarp) ryos@dalab2403sv01:~$ python -c "import warp as wp; print(wp.__version__)"
1.10.0

(XLBwarp) ryos@dalab2403sv01:~$ python -c "import warp as wp; wp.init(); print(wp.get_devices())"
Warp 1.10.0 initialized:
   CUDA Toolkit 12.8, Driver 13.2
   Devices:
     "cpu"      : "x86_64"
     "cuda:0"   : "NVIDIA RTX A4500" (20 GiB, sm_86, mempool enabled)
   Kernel cache:
     /home/ryos/.cache/warp/1.10.0
['cpu', 'cuda:0']

上記のように、設定した「Warp 1.10.0」が導入され、「 "cuda:0" : "NVIDIA RTX A4500" (20 GiB, sm_86, mempool enabled)」のようにGPUが認識されています。

Autodesk XLBの導入と確認

導入手順は、以下の公式資料では、「Installation with Warp support (single-GPU)」の条件で「pip install "xlb[warp]"」で導入しています。
https://github.com/Autodesk/XLB#basic-installation-cpu-only

しかし、この方法では、以下の問題があります。

  • 動作検証において、公式githubで公開されている例題を実行しますが、この部分でpip導入したXLBと、例題が想定しているバージョンの不一致でエラーが生じます

そこで、XLBの公式Githubから、以下のリポジトリを入手して、その中にある情報を用いて、GPU対応のXLBを準備します。
https://github.com/Autodesk/XLB.git

まずgitコマンドを導入しておきます。

(XLBwarp) ryos@dalab2403sv01:~$ sudo apt install git

XLBWarpの作業用ディレクトリ「XLBwarpWork」の中に、リポジトリ「XLB-git」を作成するために、以下のようにgitコマンドを実行します。

(XLBwarp) ryos@dalab2403sv01:~$ cd ~/XLBwarpWork/
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork$ git clone https://github.com/Autodesk/XLB.git XLB-git
Cloning into 'XLB-git'...
remote: Enumerating objects: 4115, done.
remote: Counting objects: 100% (864/864), done.
remote: Compressing objects: 100% (203/203), done.
remote: Total 4115 (delta 709), reused 661 (delta 661), pack-reused 3251 (from 2)
Receiving objects: 100% (4115/4115), 76.72 MiB | 11.84 MiB/s, done.
Resolving deltas: 100% (2598/2598), done.
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork$ ls
XLB-git
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork$ cd XLB-git/
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ ls
AUTHORS       CODE_OF_CONDUCT.md  LICENSE    assets  examples    requirements.txt  setup.py  xlb
CHANGELOG.md  CONTRIBUTING.md     README.md  docs    mkdocs.yml  ruff.toml         tests

次に、ツールや例題のバージョンを固定するために、以下の手順で、Gitでmainのcheckpoint(コミット)を固定しておくことにします。
そのうえで、「warp」をバックエンドとする指定で、XLBをリポジトリから導入します。

(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ cd ~/XLBwarpWork/XLB-git/
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ git checkout main
Already on 'main'
Your branch is up to date with 'origin/main'.
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ git pull
Already up to date.
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ pip install -e ".[warp]"
Obtaining file:///home/ryos/XLBwarpWork/XLB-git
:
Successfully built xlb
Installing collected packages: urllib3, typing-extensions, trimesh, six, scooby, scipy, ruff, pyparsing, pygments, platformdirs, pillow, packaging, opt_einsum, nvtx, ml_dtypes, mdurl, kiwisolver, idna, fonttools, docstring-parser, cycler, contourpy, charset_normalizer, certifi, attrs, annotated-types, typing-inspection, requests, pyvista-validation, python-utils, python-dateutil, pydantic-core, markdown-it-py, jaxlib, rich, pydantic, pooch, numpy-stl, matplotlib, jax, vtk, rich-rst, cyclopts, pyvista, xlb
Successfully installed annotated-types-0.8.0 attrs-26.1.0 certifi-2026.7.22 charset_normalizer-3.5.1 contourpy-1.4.0 cycler-0.12.1 cyclopts-5.1.0 docstring-parser-0.18.0 fonttools-4.66.1 idna-3.20 jax-0.11.2 jaxlib-0.11.2 kiwisolver-1.5.1 markdown-it-py-4.2.0 matplotlib-3.11.2 mdurl-0.1.2 ml_dtypes-0.6.0 numpy-stl-4.0.1 nvtx-0.2.16 opt_einsum-3.4.0 packaging-26.3 pillow-12.3.0 platformdirs-4.12.2 pooch-1.9.0 pydantic-2.13.5 pydantic-core-2.46.5 pygments-2.21.0 pyparsing-3.3.3 python-dateutil-2.9.0.post0 python-utils-4.0.1 pyvista-0.49.0 pyvista-validation-0.2.2 requests-2.34.2 rich-15.0.0 rich-rst-2.2.0 ruff-0.16.9 scipy-1.18.1 scooby-0.12.0 six-1.17.0 trimesh-5.1.0 typing-extensions-4.16.0 typing-inspection-0.4.4 urllib3-2.8.0 vtk-9.7.1 xlb-0.3.2

現在導入されている「warp,xlb」のバージョンを確認しておきます。いずれも想定通りです。

(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ pip show warp-lang
Name: warp-lang
Version: 1.10.0
Summary: A Python framework for high-performance simulation and graphics programming
Home-page: https://developer.nvidia.com/warp-python
Author:
Author-email: NVIDIA Corporation <warp-python@nvidia.com>
License: Apache-2.0
Location: /home/dalab/XLBwarp/lib/python3.12/site-packages
Requires: numpy
Required-by: xlb
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ pip show xlb
Name: xlb
Version: 0.3.2
Summary: XLB: Accelerated Lattice Boltzmann (XLB) for Physics-based ML
Home-page: https://github.com/Autodesk/XLB
Author: Mehdi Ataei
Author-email:
License: Apache License 2.0
Location: /home/dalab/XLBwarp/lib/python3.12/site-packages
Editable project location: /home/dalab/XLBwarpWork/XLB-git
Requires: jax, matplotlib, numpy, numpy-stl, nvtx, pydantic, pyvista, ruff, trimesh, warp-lang
Required-by:

以下のインラインのPythonスクリプトを用いて、さらに詳しく状況を調べてみます。

python <<'PY'
import xlb
import warp as wp

wp.init()

print("=== XLB → Warp → GPU ===")
print("XLB   :", xlb.__version__)
print("Warp  :", wp.__version__)
print("Backend:", xlb.ComputeBackend.WARP)

devices = wp.get_cuda_devices()

if devices:
    for device in devices:
        print("GPU   :", device)
        print("Name  :", device.name)
else:
    print("GPU   : Not detected")
PY

この結果は、以下のようになり、想定通りの状態になっていることが確認できました。

=== XLB → Warp → GPU ===
XLB   : 0.3.2
Warp  : 1.10.0
Backend: ComputeBackend.WARP
GPU   : cuda:0
Name  : NVIDIA RTX A4500

XLBの公式例題の準備

作成したリポジトリ「XLB-git」の状態で、公式例題の中でJAXを使用しているものを検索します。

(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ grep -RIl "ComputeBackend.WARP" examples --include="*.py"

examples/out_of_core/autodiff_lbm.py
examples/out_of_core/lid_driven_cavity.py
examples/cfd/windtunnel_3d.py
examples/cfd/rotating_sphere_3d.py
examples/cfd/turbulent_channel_3d.py
examples/ibm/airfoil_ibm.py
examples/ibm/wind_turbine_ibm.py
examples/ibm/sphere_ibm.py
examples/ibm/windtunnel_ibm.py
examples/performance/mlups_3d.py

この中で、流体解析の例題として標準的でよく使われるもので、2次元矩形空間のキャビティ流れ「examples/rotating_sphere_3d.py」を用いて、動作検証を行います。

rotating_sphere_3d.pyは、XLBのWarpバックエンドを用いて、回転する球周りの3次元流体流れをLBM(格子ボルツマン法)で解析する例題です。計算領域内に球を配置し、球を回転させることで周囲の流体に速度を与え、時間発展に伴う流れ場を計算します。
3次元格子、固体境界、速度境界条件、LBMによる衝突・ストリーミング計算など、XLBの基本的な3D流体解析機能を確認できます。また、Warpを介してNVIDIA GPUで計算するため、XLB→Warp→CUDA→GPUという計算経路が正常に動作するかを確認する検証用例題としても利用できます。

rotating_sphere_3d.pyによるXLBの動作確認

この例題用のディレクトリ「ROTS3D」を、XLB作業ディレクトリ「XLBwarpWork」に作り、この中に例題ファイル「rotating_sphere_3d.py」をコピーします。

(XLBwarp) ryos@dalab2403sv01:~$ cd ~/XLBwarpWork/
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork$ mkdir ROTS3D
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork$ ls
ROTS3D  XLB-git
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork$ cd ROTS3D/
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ cp ~/XLBwarpWork/XLB-git/examples/cfd/rotating_sphere_3d.py .
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ ls
rotating_sphere_3d.py

実はこの例題は、スクリプトの97行目の記述で、流体中に置く球を、ディレクトリ「../stl-files/」のSTLファイル「sphere.stl」で読み込むようになっています。
しかし、現在のmainのリポジトリでは、このディレクトリのファイルも存在しません。そこでリポジトリ「~/XLBwarpWork/XLB-git」に移動して、以下の手順で、過去の状態を確認します。

(XLBwarp) ryos@dalab2403sv01:~$ cd ~/XLBwarpWork/XLB-git/
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/XLB-git$ git log --all --full-history -- "*/sphere.stl"

commit f9de8ae596596d5194ea6da17f8ff3e1d522835e
Author: Oliver <loliverhennigh101@gmail.com>
Date:   Wed Sep 10 16:00:20 2025 -0700
    removed refactor

commit 9395c0a868faafbbf8f2aa55139335afb56d2172
Merge: 99d7c51 9a1bc61
Author: Oliver <loliverhennigh101@gmail.com>
Date:   Mon Sep 8 11:20:27 2025 -0700
    updated

commit 3882ba55af1d1c28dcdc5b6d0d50af4bdd5d539b
Author: Oliver <loliverhennigh101@gmail.com>
Date:   Wed Jan 15 14:24:39 2025 -0800
    added sphere

これを見ると、以下の状態であり、コミットID「3882ba55」で追加されたことがわかります。

3882ba55 added sphere
9395c0a updated
f9de8ae removed refactor

そこで、例題ディレクトリ「~/XLBwarpWork/ROTS3D」に移動して、過去のコミットID「3882ba55」から、このSTL形状ファイル「sphere.stl」を入手します。

(XLBwarp) ryos@dalab2403sv01:~$ cd ~/XLBwarpWork/ROTS3D/
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ ls
rotating_sphere_3d.py
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ git -C ../XLB-git show 3882ba55:examples/CFD_refactor/sphere.stl > sphere.stl
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ ls
rotating_sphere_3d.py  sphere.stl

次に、例題スクリプトの修正して、STL形状ファイル「sphere.stl」を読み込めるようにします。ファイルのバックアップを取って、viエディタなどで97行目を修正します。

(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ cp rotating_sphere_3d.py rotating_sphere_3d-org.py
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ ls
rotating_sphere_3d-org.py  rotating_sphere_3d.py  sphere.stl
(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ vi rotating_sphere_3d.py

96 # Load the mesh (replace with your own mesh)
97 stl_filename = "./sphere.stl"

以下のように、pythonを用いて、この例題スクリプトを実行します。
なお、この計算環境ではNVIDIA GPUが1つ「cuda:0」があって、これを認識して、GPUで解析が進みます。
そのあとの解析設定では、注釈のような情報がまとめられています。
続いて、解析ステップ100000に向けて1000ステップずつ、CD(抗力係数)とCL(揚力係数)の値が出力されます。

(XLBwarp) ryos@dalab2403sv01:~/XLBwarpWork/ROTS3D$ python rotating_sphere_3d.py
Warp 1.10.0 initialized:
   CUDA Toolkit 12.8, Driver 13.2
   Devices:
     "cpu"      : "x86_64"
     "cuda:0"   : "NVIDIA RTX A4500" (20 GiB, sm_86, mempool enabled)
   Kernel cache:
     /home/ryos/.cache/warp/1.10.0
==================================================
Simulation Configuration:
Grid size: 320 x 224 x 224         :格子分割320x224x224
Backend: ComputeBackend.WARP        :バックエンドWARP利用
Velocity set: D3Q27             :3次元27方向速度モデル
Precision policy: PrecisionPolicy.FP32FP32 :計算精度FP32
Prescribed velocity: 0.04          :無次元速度の設定0.04
Reynolds number: 200.0           :レイノルズ数200
Max iterations: 100000           :最大反復回数100000
==================================================
:

CD=-0.10218326565469578, CL=0.1030811013767393
Iteration: 1000/100000 | Time elapsed: 4.11s
:
CD=0.8198138174840189, CL=-0.23366430295702545
Iteration: 99000/100000 | Time elapsed: 9.59s
CD=0.82036048830504, CL=-0.23371967873795502
CD=0.8204585944564485, CL=-0.2338621827864952
Simulation completed successfully.

実行すると、CD(drag_ma)とCL(lift_ma)のグラフのpng画像ファイルと、速度分布の結果画像pngファイルが、1000ステップごとに、99999ステップまでの101段階で保存されます。ファイルのタイムスタンプを見ると解析に約18分間必要でした。
なお、例題を実行したPCのGPUは、コマンドnvidia-smiで確認すると、「NVIDIA RTX A4500:20GB」です。
なお、GPUが「NVIDIA GeForce RTX 3070」の場合には、約30分必要でした。GPUの性能によって計算速度は大きく異なります。

rotating_sphere_3d.pyの結果確認

Windowsのファイルブラウザの左下に、Linuxの項目があり、ここにファイルシステム「Ubuntu-24.04-XLBwarp」があります。このリンクをデスクトップに作っておきます。
例題ディレクトリ「\home\ryos\XLBwarpWork\ROTS3D」を開きます。最後のステップの画像ファイル「rotating_sphere_3d_99999.png」は、以下のように解析最後の速度分布を表しています。

rotating_sphere_3d_99999.png

ちなみに、途中の 5000,6000ステップの状態は以下の通りです。
image.png

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?