技術情報

GPUDirectの導入について


株式会社HPCソリューションズ

2011年08月05日



1. GPU Directとは!?


ここではGPU Direct1.0について紹介致します。

GPU上のメモリから他ノードにデータ転送を行う際、通常、下記の経路1となります。

<<経路1>>


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


ここで注目する点はノード上のメモリを2回通ることです。

そのため、データ転送のボトルネックとなります。

そこで、GPU Directを使用するとこにより、下記の経路2となり、


<<経路2>>


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


データ転送の向上が期待できます。

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



2. 動作環境


GPU DirectはOSにRedHat Linux5.5、Inifiband、NVIDIA Teslaが必要となります。


今回はApproの1426G4にRedHat互換のCentOS5.5 にMellanoxのMT26428、Tesla S2050を利用し、確認しました。


まず、用意するものは

      
  1. パッチが適応されたRedHat Enterprise Linux5.5のカーネル

  2. Inifiniband用のドライバ

です。


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

  1. nvidia-gpudirect-3.2-1.tar.gzをNVIDIA GPUDirect™|NVIDIA Developer Zoneからダウンロード

  2. 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 の導入はおしまいです。




go top