見積依頼

株式会社HPCソリューションズ
2011年08月05日

1.GPU Directとは!?

ここではGPU Direct1.0について紹介致します。
GPU上のメモリから他ノードにデータ転送を行う際、通常、下記の経路1となります。

GPU上のメモリ → チップセット → CPU → ノード上のメモリ → CPU → InfiniBandで使用するノード上のメモリ → InfiniBand HCA → Inifibandケーブル → 他ノード

ここで注目する点はノード上のメモリを2回通ることです。
そのため、データ転送のボトルネックとなります。
そこで、GPU Directを使用するとこにより、下記の経路2となり、

経路1

GPU上のメモリ → チップセット → CPU → InfiniBandで使用するノード上のメモリ → InfiniBand HCA → Inifibandケーブル → 他ノード データ転送の向上が期待できます。

なお、GPU DirectにはCUDA4.0ではバージョン1.0とバージョン2.0があります。

経路2

2.動作環境

GPU DirectはOSにRedHat Linux5.5、Inifiband、NVIDIA Teslaが必要となります。
今回はApproの1426G4にRedHat互換のCentOS5.5 にMellanoxのMT26428、Tesla S2050を利用し、確認しました。
まず、用意するものは

  • パッチが適応されたRedHat Enterprise Linux5.5のカーネル
  • Inifiniband用のドライバ

です。

それぞれ、NVIDIAのホームページ、Mellanoxのホームページからダウンロードしてきます。

  • nvidia-gpudirect-3.2-1.tar.gzをNVIDIA GPUDirect™|NVIDIA Developer Zoneからダウンロード
  • MLNX_OFED_LINUX-GPUDIRECT-1.5.2-2.1.0-1.1.1000-rhel5.5.isoをMellanox Products: Mellanox OFED GPUDirectからダウンロード

3.導入手順

大雑把な手順は

  • 3-1.GPU Direct用のカーネルのインストール
  • 3-2.NVIDIAドライバ導入
  • 3-3.Mellanox、Inifinibandのドライバ導入
  • 3-4.確認

と言う形になります。

詳細導入手順

3-1.rpm形式で配布されていますので、

rpm -ihv kernel-2.6.18-194.nvel5.x86_64.prm kernel-debuginfo-common-2.6.18-194.nvel5.x86_64.rpm kernel-devel-2.6.18-194.nvel5.x86_64.rpm kernel-headers-2.6.18-194.nvel5.x86_64.rpm

として、インストールし再起動します。
なお、ブート時にGPU_Direct対応のカーネルでブートするためには、grubを使用している場合は、/boot/grub/grub.conf を変更してください。

3-2.NVIDIAドライバはカーネルごとに適応していく必要があります。

sh ./devdriver_4.0_linux_64_270.41.19.run

として、ドライバを構築します。

3-3.続いて、MellanoxのInifinibandのドライバをインストールします。

ISOファイルになっていますので、適当なディレクトリにマウントします。
今回は/mnt/cdromにマウントします。

mount -o loop MLNX_OFED_LINUX-GPUDIRECT-1.5.2-2.1.0-1.1.1000-rhel5.5.iso /mnt/cdrom

ISOファイルをマウント出来たら、mlnxofedinstall というシェルがありますので、-all をつけて、実行します。

cd /mnt/cdrom/
./mlnxofedinstall -all

3-4.無事にイントールが終了すると、/sys/module/ib_core/parameters/ 以下にgpu_direct_enableというファイルが出来ています。

[root@gp01 ~]# ls -la /sys/module/ib_core/parameters/
合計 0
drwxr-xr-x 2 root root 0 7月 17 12:11 .
drwxr-xr-x 4 root root 0 7月 17 12:22 ..
-rw-r–r– 1 root root 4096 7月 17 12:11 gpu_direct_enable
-r–r–r– 1 root root 4096 7月 17 12:11 gpu_direct_fail
-r–r–r– 1 root root 4096 7月 17 12:11 gpu_direct_pages
-r–r–r– 1 root root 4096 7月 17 12:11 gpu_direct_shares
[root@gp01 ~]# cat /sys/module/ib_core/parameters/*
1
0
0
0

なお、Inifiniband経由でIPoIBで通信する際は、IPなどの設定が必要となります。
設定後は/etc/init.d/network などのリスタートが必要となることがございます。

これでGPU上のメモリから他ノードへInifiband を介した通信はGPU Directを利用して通信されるようになります。
Infinibandに対応した通信ライブラリ(例えば、mvapich2 など)を使用して通信を行ってください。

以上で、GPU Direct の導入はおしまいです。