サポート

技術情報

GPUDirectの導入について

株式会社HPCソリューションズ
2011年08月05日
目次
  1. GPU Directとは!?
  2. 動作環境
  3. 導入手順

  1. GPU Directとは!?

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

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

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

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

データ転送の向上が期待できます。
なお、GPU DirectにはCUDA4.0ではバージョン1.0とバージョン2.0があります。


  1. 動作環境

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からダウンロード


  1. 導入手順

大雑把な手順は
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