Intel Arcを搭載したノートパソコンを購入したので、AI開発の低レイヤーライブラリーが動かないか試行錯誤したメモです。
記事内ではIntel GPUを使用した支援のXPUと呼称します。
タイトルとにらめっこしてたら微妙だったので変えました。
前提環境
ハードウェア
- Intel GPUカードまたはIntel Core Ultra CPUを搭載しているマシン
- Intel® Arc™ B-Series Graphics
- Intel® Arc™ A-Series Graphics
- Intel® Core™ Ultra Series 2 Mobile Processors (Arrow Lake-H)
- Intel® Core™ Ultra Series 2 with Intel® Arc™ Graphics (Lunar Lake-V)
- Intel® Core™ Ultra Processors with Intel® Arc™ Graphics (Meteor Lake-H)
ソフトウェア
- OS: Windows 11
- グラフィックドライバ: とりあえず最新(Intel Arc Graphis Driver 32.0.101.6554)
- Python: 3.12(今回はmise上にのせた)
TL;DR
- 手順はIntelが出してる これ に沿えば行ける。
- でもmise+uv環境でどうにかしたい。
- 四苦八苦してuvでも動いた!
まずは普通にpipで
この項はIntel Extension for PyTorch Installation Guideのトレスです。
こちら(https://pytorch-extension.intel.com/installation) にアクセスして手順を表示しておきましょう。
-
Pythonが動く環境を何らかの方法で用意します。
- 先駆者がいろいろ記事を出しているのでここでは割愛
-
適当な開発ディレクトリにvenvを作ってアクティブ化する。
PS > python.exe -m venv .venv PS > .\.venv\Scripts\activate (.venv) PS > -
Torchをインストールする(XPU指定)
PS > python -m pip install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0 --index-url https://download.pytorch.org/whl/xpu (いろいろ出力される) Successfully installed MarkupSafe-2.1.5 dpcpp-cpp-rt-2025.1.1 filelock-3.20.0 fsspec-2025.12.0 intel-cmplr-lib-rt-2025.1.1 intel-cmplr-lib-ur-2025.1.1 intel-cmplr-lic-rt-2025.1.1 intel-opencl-rt-2025.1.1 intel-openmp-2025.1.1 intel-pti-0.12.3 intel-sycl-rt-2025.1.1 jinja2-3.1.6 mkl-2025.1.0 mpmath-1.3.0 networkx-3.6.1 numpy-2.3.5 onemkl-sycl-blas-2025.1.0 onemkl-sycl-dft-2025.1.0 onemkl-sycl-lapack-2025.1.0 onemkl-sycl-rng-2025.1.0 onemkl-sycl-sparse-2025.1.0 pillow-12.0.0 pytorch-triton-xpu-3.4.0 setuptools-70.2.0 sympy-1.14.0 tbb-2022.1.0 tcmlib-1.3.0 torch-2.8.0+xpu torchaudio-2.8.0+xpu torchvision-0.23.0+xpu typing-extensions-4.15.0 umf-0.10.0 -
Intelの手順通りに続けてintel-extension-for-pytorchをインストールしようとするとパッケージが足りないと怒られるので、
psutilとpackagingをあらかじめインストールする。(.venv) PS > python -m pip install psutil packaging -
intel-extension-for-pytorchをインストール(.venv) PS > python -m pip install intel-extension-for-pytorch==2.8.10+xpu --index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/ -
これでPytorchが動くはず。テストスクリプトを動かす。
(.venv) PS > python -c "import torch; import intel_extension_for_pytorch as ipex; print(torch.__version__); print(ipex.__version__); [print(f'[{i}]: {torch.xpu.get_device_properties(i)}') for i in range(torch.xpu.device_count())];" (初回実行時結構待ちます。5分ほどお待ちを…) # こんなのが出ればOK [0]: _XpuDeviceProperties(name='Intel(R) Arc(TM) 140T GPU (16GB)', platform_name='Intel(R) oneAPI Unified Runtime over Level-Zero', type='gpu', driver_version='1.6.31896', total_memory=16797MB, max_compute_units=128, gpu_eu_count=128, gpu_subslice_count=16, max_work_group_size=1024, max_num_sub_groups=128, sub_group_sizes=[8 16 32], has_fp16=1, has_fp64=1, has_atomic64=1)
おめでとうございます。これでIntel GPUの支援下でTorchが使えます。
uv環境でこの環境を作成する
AI開発でPythonはuvで管理されている方も多いと思います。
ネイティブにインストールしたPythonだと不便なのでこれをuv環境下に移植します。
uvはパッケージの依存管理が厳密
pipでは管理がかなり緩いため、前項のようにサクッと動きましたがuvではそうサクッとは行きません。
結論
intel-extension-for-pytorch関連で403エラーが頻発するので、uvの時点で管理する物を明示しています。
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "Your-Torch-XPU-Project"
version = "0.1.0"
description = "Intel XPU Environment"
requires-python = ">=3.12"
dependencies = [
"markupsafe==2.1.5",
"filelock==3.20.0",
"jinja2==3.1.6",
"networkx==3.6.1",
"numpy==2.3.5",
"pillow==12.0.0",
"psutil==7.2.1",
"mpmath==1.3.0",
"sympy==1.14.0",
# --- Torch (XPU) ---
"torch==2.8.0",
"torchaudio==2.8.0",
"torchvision==0.23.0",
# --- IPEX (Intel Extension) ---
"intel-extension-for-pytorch==2.8.10+xpu",
]
[tool.uv]
package = false
# --- 1. PyTorch公式 XPUリポジトリ ---
[[tool.uv.index]]
name = "pytorch-xpu"
url = "https://download.pytorch.org/whl/xpu"
explicit = false # これにより triton 等の隠れた依存関係が見つかるようになりました
# --- 2. Intel公式 IPEXリポジトリ ---
[[tool.uv.index]]
name = "intel-ipex"
url = "https://pytorch-extension.intel.com/release-whl/stable/xpu/us/"
explicit = true # 403回避のために管理
# --- ソース割り当て ---
[tool.uv.sources]
# PyTorch関連
torch = { index = "pytorch-xpu" }
torchaudio = { index = "pytorch-xpu" }
torchvision = { index = "pytorch-xpu" }
# IPEX
intel-extension-for-pytorch = { index = "intel-ipex" }
ここまで出来れば uv sync でサクッと環境が作れます。
PS > uv sync
Using CPython 3.12.12 interpreter at: C:\Users\me\AppData\Local\mise\installs\python\3.12.12\python.exe
Creating virtual environment at: .venv
Resolved 39 packages in 2.22s
Installed 35 packages in 2.75s
ベンチマーク
CPUで演算した場合とIntel GPU(XPU)で演算した場合の差を計測しました。
ベンチマークスクリプト
Geminiに作って貰いました。
処理内容は「行列積(Matrix Multiplication)」を行い、CPUとXPU(Intel GPU)の演算速度を比較するものです。
行列のサイズを変えることで処理を大小を変えられます。
import torch
import intel_extension_for_pytorch as ipex
import time
import sys
def run_benchmark():
# --- 設定 ---
# 行列のサイズ (N x N)
MATRIX_SIZE = 16384
print(f"--- Intel XPU Benchmark Environment ---")
print(f"Python: {sys.version.split()[0]}")
print(f"Torch: {torch.__version__}")
print(f"IPEX: {ipex.__version__}")
if not torch.xpu.is_available():
print("Error: XPU device not found!")
return
device_name = torch.xpu.get_device_properties(0).name
print(f"Device: {device_name}")
print("-" * 40)
print(f"Task: Matrix Multiplication ({MATRIX_SIZE}x{MATRIX_SIZE}) Float32")
print("-" * 40)
# --- 1. CPUでの計測 ---
print("Running on CPU... (Please wait)")
try:
# データ作成
a_cpu = torch.randn(MATRIX_SIZE, MATRIX_SIZE, device="cpu")
b_cpu = torch.randn(MATRIX_SIZE, MATRIX_SIZE, device="cpu")
# 修正点: ipex.optimize はモデルがない場合エラーになることがあるため削除
# import intel_extension_for_pytorch している時点で
# OneDNNなどの基本的なCPU最適化は自動的に有効になっています。
# ウォームアップ
_ = torch.matmul(a_cpu, b_cpu)
# 計測開始
start_time = time.time()
c_cpu = torch.matmul(a_cpu, b_cpu)
cpu_time = time.time() - start_time
print(f"CPU Time: {cpu_time:.4f} sec")
except Exception as e:
print(f"CPU Benchmark Failed: {e}")
# 詳細なエラートレースを表示したい場合はコメントアウトを外す
# import traceback
# traceback.print_exc()
cpu_time = float('inf')
print("-" * 20)
# --- 2. XPU (GPU) での計測 ---
print("Running on XPU... (Please wait)")
try:
# データ作成 (XPUへ転送)
a_xpu = torch.randn(MATRIX_SIZE, MATRIX_SIZE, device="xpu")
b_xpu = torch.randn(MATRIX_SIZE, MATRIX_SIZE, device="xpu")
# ウォームアップ
_ = torch.matmul(a_xpu, b_xpu)
torch.xpu.synchronize() # 処理完了を待つ
# 計測開始
start_time = time.time()
c_xpu = torch.matmul(a_xpu, b_xpu)
torch.xpu.synchronize() # 処理完了を待つ
xpu_time = time.time() - start_time
print(f"XPU Time: {xpu_time:.4f} sec")
except Exception as e:
print(f"XPU Benchmark Failed: {e}")
xpu_time = float('inf')
# --- 結果表示 ---
print("=" * 40)
if xpu_time < cpu_time and cpu_time != float('inf'):
speedup = cpu_time / xpu_time
print(f"Result: XPU is {speedup:.2f}x faster than CPU 🚀")
elif cpu_time == float('inf'):
print("Result: CPU Failed, but XPU is working perfectly! 🚀")
else:
print("Result: CPU was faster (Increase matrix size?)")
print("=" * 40)
if __name__ == "__main__":
run_benchmark()
ベンチマーク結果
CPUで処理するより、 XPUで処理した方が3.5倍ほど高速になりました! (ノ´∀`)ノ
Nvidia GPUと比較すれば非力ですが、大分普及したいわゆるAIパソコンのリソースを開発に活用できるのはとても喜ばしいことかと思います!
--- Intel XPU Benchmark Environment ---
Python: 3.12.12
Torch: 2.8.0+xpu
IPEX: 2.8.10+xpu
Device: Intel(R) Arc(TM) 140T GPU (16GB)
----------------------------------------
Task: Matrix Multiplication (16384x16384) Float32
----------------------------------------
Running on CPU... (Please wait)
CPU Time: 9.9230 sec
--------------------
Running on XPU... (Please wait)
XPU Time: 2.8024 sec
========================================
Result: XPU is 3.54x faster than CPU 🚀
========================================
開発の仕方
XPU環境ではTorchを使用したPythonスクリプトを書く際に次のようにインポートすれば良いようです。
import torch
import intel_extension_for_pytorch as ipex
後は普段通りにtorchを呼べばOK
まとめ
近年は家電量販店でAI PCと呼ばれるパソコンが普及してきました。
しかしローカルで実用的に動作するAIモデルはまだまだ少なく、一部のソフトウェアの機能支援に使われる程度に留まっています。
これをAI製品開発に有効活用できれば良いのにを思いながら、WindowsノートPCを買い換えたのでチャレンジしてみました。
Nvidia GPU・CUDAと比較すれば動作安定性や開発ツールの整備はまだまだだなと感じますがTorchなどAI開発における低レイヤー部分が動けば趣味レベル~PoCレベルでは十分に価値があるのではないでしょうか。
手元のPCのリソース活用につながれば幸いです。
誤りがあれば優しく教えてください。
