PCIe bandwidth
概要
PCIe bandwidth
(PCIeバンド幅)は、CPU
とGPU
間のデータ転送速度を決定する重要な指標です。ローカルLLM運用において、モデル読み込み時間、CPU-GPU間データ転送、マルチGPU通信の性能に直接影響します。
適切なPCIe世代とレーン数の選択により、ハードウェアの潜在能力を最大限に引き出すことができます。
PCIe世代別仕様
PCIe帯域幅(レーンあたり)
- PCIe 3.0: 1GB/s per lane
- PCIe 4.0: 2GB/s per lane
- PCIe 5.0: 4GB/s per lane
- PCIe 6.0: 8GB/s per lane(2025年以降)
x16スロット総帯域幅
- PCIe 3.0 x16: 16GB/s(双方向32GB/s)
- PCIe 4.0 x16: 32GB/s(双方向64GB/s)
- PCIe 5.0 x16: 64GB/s(双方向128GB/s)
ローカルLLMでの影響
モデル読み込み時間
# Llama 2 70B(140GB FP16)の読み込み時間例
PCIe 3.0 x16 (16GB/s): 140GB ÷ 16GB/s = 8.75秒
PCIe 4.0 x16 (32GB/s): 140GB ÷ 32GB/s = 4.38秒
PCIe 5.0 x16 (64GB/s): 140GB ÷ 64GB/s = 2.19秒
# 実際は効率性を考慮(約70-80%)
PCIe 3.0実測: 約12-15秒
PCIe 4.0実測: 約6-8秒
PCIe 5.0実測: 約3-4秒
CPU-GPU間データ転送
- モデル分割時: CPU-GPU間でのレイヤー転送
- メモリオフロード: VRAM不足時のRAM退避
- 動的ロード: 必要な部分のみ読み込み
- 複数モデル切替: モデル間の高速切り替え
GPU別推奨PCIe構成
単一GPU構成
- RTX 4090/4080: PCIe 4.0 x16推奨
- RTX 3090/3080: PCIe 3.0 x16でも十分
- RX 7900 XTX: PCIe 4.0 x16推奨
- エントリーGPU: PCIe 3.0 x8でも実用的
マルチGPU構成
- 2GPU: 各PCIe 4.0 x16(CPUレーン数要確認)
- 4GPU: 各PCIe 4.0 x8以上
- NVLink/SLI: GPU間直接接続併用
- AMD Infinity Cache: GPU間高速通信
プラットフォーム別対応
Intel プラットフォーム
- Z790/B760: PCIe 5.0 x16 + PCIe 4.0 x4
- Z690/B660: PCIe 5.0 x16 + PCIe 3.0 x4
- X299: PCIe 3.0 x16×4(HEDT)
- W790: PCIe 5.0多レーン(ワークステーション)
AMD プラットフォーム
- X670E/B650E: PCIe 5.0 x16 + PCIe 4.0 x16
- X570/B550: PCIe 4.0 x16 + PCIe 4.0 x16
- TRX40: PCIe 4.0 x16×4(Threadripper)
- WRX80: PCIe 4.0多レーン(Pro)
パフォーマンス測定
帯域幅テストツール
# NVIDIA GPU帯域幅測定
nvidia-smi dmon -i 0 -s pcie -c 10
# PyTorchでのPCIe帯域幅測定
import torch
import time
def measure_pcie_bandwidth():
device = torch.device('cuda')
size = 1024 * 1024 * 1024 # 1GB
# CPU → GPU転送測定
cpu_tensor = torch.randn(size // 4, dtype=torch.float32)
start = time.time()
gpu_tensor = cpu_tensor.to(device)
torch.cuda.synchronize()
upload_time = time.time() - start
# GPU → CPU転送測定
start = time.time()
cpu_result = gpu_tensor.to('cpu')
download_time = time.time() - start
print(f"Upload bandwidth: {size / upload_time / 1e9:.2f} GB/s")
print(f"Download bandwidth: {size / download_time / 1e9:.2f} GB/s")
measure_pcie_bandwidth()
ボトルネック診断
- GPU-Z: リアルタイムPCIe使用率
- HWiNFO64: 詳細なPCIe統計
- perfmon: Windowsシステム監視
- iotop: LinuxのI/O監視
最適化のポイント
システム設計
- CPUレーン数確認: 総PCIeレーン数の把握
- スロット配置: 最適なGPU配置
- M.2 SSD共有: PCIeレーンの競合回避
- 将来拡張性: アップグレード計画
データ転送最適化
- ピン留めメモリ: より高速な転送
- 非同期転送: 計算と転送の並列化
- バッチ転送: 小さなデータの統合
- データ圧縮: 転送量の削減
実用的な制約と対処
一般的な制約
- PCIe 3.0 x8: 大多数のGPUで性能影響は軽微
- PCIe 2.0: 古いシステム、明確な性能低下
- レーン共有: M.2 SSD使用時の帯域分割
- 電力制限: スロット電力供給能力
対処法
- モデル事前読み込み: 起動時間の短縮
- ローカルキャッシュ: 頻繁に使用するモデル
- 量子化モデル: データサイズ削減
- SSD高速化: NVMe SSDでI/O改善
将来の展望
技術動向
- PCIe 6.0: 2025年以降、128GB/s x16
- CXL(Compute Express Link): メモリ・ストレージ統合
- NVLink 5.0: GPU間通信のさらなる高速化
- 光接続: 長距離高速データ転送
推奨戦略
- 現在: PCIe 4.0対応システム推奨
- 新規構築: PCIe 5.0対応マザーボード
- 既存システム: PCIe 3.0 x16でも実用的
- 将来性: アップグレード可能な設計