1. はじめに
AIモデルをローカル環境で動かそうとした際、「推論速度が遅い」「メモリが足りない」といった壁にぶつかることは少なくありません。特に最新のLLM(大規模言語モデル)を一般的なPCで動かすのは、非常に負荷の高い作業です。
そこで注目したいのが、Intelが提供している OpenVINO™ ツールキット です。
OpenVINOの特徴
OpenVINOは、Intel製のCPUやGPU、NPUといったハードウェアの性能を最大限に引き出し、AI推論を高速化・最適化するためのオープンソースツールキットです。
- マルチデバイス対応: 1つのモデルを書き換えることなく、CPU、内蔵GPU、ディスクリートGPU、NPUで動作させることが可能。
- モデルの最適化: 量子化(INT8やINT4など)により、モデルサイズを削減しつつ高速な推論を実現。
- GenAI API: 最近ではLLM専用のライブラリ(OpenVINO GenAI)が登場し、わずか数行のPythonコードでLlama 3.1などの最新モデルを扱えるようになりました。
今回は、このOpenVINO GenAIを使い、**「CPUとGPUでどれくらい性能差が出るのか」「リソースの使い方はどう変わるのか」**を実測データをもとに解説します。
2. 検証環境・事前準備
- CPU: Intel Core Ultra 7 258V (Lunar Lake)
- GPU: Intel Arc Graphics 140V (内蔵GPU / 64 EU)
- 物理メモリ: 32GB
- OS: Ubuntu 22.04
- 言語 Python 3.12.3
- モデル: Llama-3.1-8b-instruct-int4-ov (INT4量子化版)
- ライブラリ: 以下記載
# 推論エンジン
openvino-genai
openvino
# モデル変換・最適化(INT4量子化にnncfが必須)
optimum-intel[openvino,nncf]
# ベースライブラリ(変換時に必要)
torch
transformers
huggingface_hub
# トークナイザー・フォーマット関連
sentencepiece
protobuf
# メモリ計測用(任意)
psutil
OpenVINO形式に変換
今回の肝です。Hugging FaceにあるMeta公式のLlama 3.1を、Intel GPUでで動かすために INT4量子化 を施しつつOpenVINO形式へ変換します。Hugging Faceには変換済みのモデルもあります。
optimum-cli export openvino \
--model meta-llama/Llama-3.1-8B-Instruct \
--task text-generation-with-past \
--weight-format int4 \
./models/llama-3.1-8b-int4-ov
- このコマンドがやっていること
Export: PyTorch形式をIntel環境で効率よく計算できるIR形式(.xml/.bin)へ変換。
INT4量子化: 30GB以上ある元の重みを4bit(約1/8)に圧縮。これにより、数GBのVRAM/RAMでも動作可能になります。
3. 検証コード
変換したモデルを使い、CPUとGPUそれぞれの「応答ラグ(TTFT)」と「生成速度(TPS)」を計測します。
import time
import psutil
import openvino_genai as ov_genai
from huggingface_hub import snapshot_download
# --- 設定 ---
llm_model_id = "OpenVINO/llama-3.1-8b-instruct-int4-ov"
llm_path = "./models/llama-3.1-8b-int4-ov"
devices = ["CPU", "GPU"]
prompt = "OpenVINOについて日本語で100字以内で教えて。"
config = ov_genai.GenerationConfig()
config.max_new_tokens = 256
# --- 計測用の状態管理クラス ---
class BenchmarkTest:
def __init__(self):
self.first_token_time = None
self.start_time = None
self.token_count = 0
def __call__(self, token_str):
# 最初のトークンが生成された時間を記録
if self.first_token_time is None:
self.first_token_time = time.perf_counter()
self.token_count += 1
print(token_str, end="", flush=True)
return False
def print_mem_usage(label):
process = psutil.Process()
mem_info = process.memory_info()
print(f"[{label}] Memory Usage: {mem_info.rss / 1024 / 1024:.2f} MB")
def run_benchmark(device_name):
print(f"\n{'='*10} Testing Device: {device_name} {'='*10}")
# 1. モデルロード
print_mem_usage("Before Load")
pipe = ov_genai.LLMPipeline(llm_path, device_name)
print_mem_usage("After Load")
# 2. Warm-up (出力は表示しない)
print("\nWarming up...")
pipe.generate("Hello", config)
# 3. 本番計測
print(f"\nInference running on {device_name}...\n")
print("-" * 20 + " [Output] " + "-" * 20)
# testerの初期化
b_tester = BenchmarkTest()
start_time = time.perf_counter()
# testerを渡して実行
result = pipe.generate(prompt, config, b_tester)
end_time = time.perf_counter()
print("\n" + "-" * 50)
# --- 性能計算 ---
total_duration = end_time - start_time
# TTFT (Time To First Token)
ttft = b_tester.first_token_time - start_time if b_tester.first_token_time else 0
# TPS (Tokens Per Second) ※生成フェーズのみの速度
gen_duration = end_time - b_tester.first_token_time if b_tester.first_token_time else total_duration
tps = b_tester.token_count / gen_duration if gen_duration > 0 else 0
print(f"\n[Metrics for {device_name}]:")
print(f" - Total Execution Time: {total_duration:.2f} sec")
print(f" - Time to First Token (TTFT): {ttft:.4f} sec <-- 応答の速さ")
print(f" - Throughput (TPS): {tps:.2f} tokens/s <-- 生成速度")
print(f" - Generated Tokens: {b_tester.token_count} tokens")
print("-" * 45)
# 実行
for dev in devices:
try:
run_benchmark(dev)
except Exception as e:
print(f"Device {dev} is not available or error occurred: {e}")
ちゃんとGPUを使えています。
コードの説明
-
LLMPipeline(llm_path, device_name): ここがOpenVINOの核心です。device_name に "CPU" や "GPU" を渡すだけで、使用するハードウェアを瞬時に切り替えられます。 -
BenchmarkTest: LLMは1文字ずつ出力されます。最初の文字が届いた時間を記録することで、**TTFT(Time To First Token)**という「AIが考え始めてから答え始めるまでのラグ」を測っています。 -
Warm-up: GPUは最初の1回目だけ「最適化(コンパイル)」に時間がかかるため、計測前に短い文章を1度だけ生成させています。
4. 比較結果:実測データ
実行時の出力
$ python llm_test.py
========== Testing Device: CPU ==========
[Before Load] Memory Usage: 68.62 MB
[After Load] Memory Usage: 1169.29 MB
Warming up...
Inference running on CPU...
-------------------- [Output] --------------------
OpenVINO(オープンビノ)とは、Intelが提供するオープンソースの深層学習推論エンジンです。主に、CPU、GPU、FPGA、ASICなど、さまざまなハードウェア上で、AI推論を高速かつ効率的に実行することを目的としています。OpenVINOは、モデルをさまざまなハードウェア上で実行できるように、モデルをオプティマイズし、コンパイルし、デプロイするためのツールキットを提供します。
--------------------------------------------------
[Metrics for CPU]:
- Total Execution Time: 20.07 sec
- Time to First Token (TTFT): 1.3145 sec <-- 応答の速さ
- Throughput (TPS): 6.61 tokens/s <-- 生成速度
- Generated Tokens: 124 tokens
---------------------------------------------
========== Testing Device: GPU ==========
[Before Load] Memory Usage: 123.94 MB
[After Load] Memory Usage: 470.01 MB
Warming up...
Inference running on GPU...
-------------------- [Output] --------------------
OpenVINO(オープンビノ)とは、Intelが提供するオープンソースの深層学習推論エンジンです。主に、CPU、GPU、FPGA、ASICなど、さまざまなハードウェア上で、AI推論を高速かつ効率的に実行することを目的としています。OpenVINOは、モデルをさまざまなハードウェア上で実行できるように、モデルをオプティマイズし、コンパイルし、デプロイするためのツールキットを提供します。
--------------------------------------------------
[Metrics for GPU]:
- Total Execution Time: 8.34 sec
- Time to First Token (TTFT): 0.2567 sec <-- 応答の速さ
- Throughput (TPS): 15.33 tokens/s <-- 生成速度
- Generated Tokens: 124 tokens
---------------------------------------------
計測の結果、CPUとGPUで明確な差が現れました。
| 指標 | CPU実行 | GPU実行 | 比較 |
|---|---|---|---|
| 推論時間 (Total Time) | 20.07 sec | 8.34 sec | GPUが約2.4倍高速 |
| ロード後のRAM使用量 | 1169.29 MB | 470.01 MB | GPUの方がRAM消費が少ない |
5. 考察
① 推論速度:GPUの圧倒的な並列処理能力
GPU実行では、CPUに対して約2.4倍の高速化を達成しました。LLMの推論(Transformerブロックの行列演算)は高度に並列化可能なタスクであるため、内蔵GPUであってもその恩恵は絶大です。
② RAM使用量の「逆転現象」の理由
注目すべきは、GPU実行時の方がメインメモリ(RAM)の消費が大幅に低い(約700MB減)という点です。これは、OpenVINOが推論に必要なモデルデータをRAMから**GPU専用メモリ(VRAM)**へ転送して処理しているためだと思われます。
- CPU実行: RAM上にすべての重みデータを展開して演算。
- GPU実行: 重みデータをVRAMへオフロード。結果としてシステム全体のRAM負荷が軽減される。
6. まとめ
OpenVINO GenAIを活用することで、コードを一行書き換えるだけで劇的なパフォーマンス向上とリソースの効率化が可能になります。
「ローカルLLMは重い」と思われがちですが、Intel CPU搭載PCをお持ちなら、内蔵GPUを眠らせておく手はありません。ぜひ OpenVINO で高速なAI体験を試してみてください。
参考

