Help us understand the problem. What is going on with this article?

CentOS 7.3 に CUDA 8.0 (&NVIDIA P100) をインストールする

More than 3 years have passed since last update.

NVIDIA CUDA Installation Guide for LinuxCUDA Quick Start Guide を参考に CUDA8.0 を CentOS7.3 へインストールした際のメモです。

CUDA の概要

CUDA は NVIDIA 社の開発した並列処理のプログラミングモデル。NVIDIA 社の GPU と同時に使う。CUDA をインストールすると C 等のプログラミング言語に拡張がされ、並列処理が簡単・高速に実現できる。

CUDA を使うには以下が必要:

  • CUDA に対応した GPU(今回は P100 を使用)
  • NVIDIA CUDA toolkit (今回は CUDA 8.0.44 を使用。NVIDIAドライバも同時にインストールされる)
  • OS(今回は CentOS 7.3を使用)

CUDA インストール事前準備

GPU の確認

CUDA 対応 GPU が正しく設置されていることを確認する。

確認方法は以下:

$ lspci | grep -i nvidia
0c:00.0 3D controller: NVIDIA Corporation GP100GL (rev a1)
84:00.0 3D controller: NVIDIA Corporation GP100GL (rev a1)

※トラブルが発生した場合は、以下でエラーメッセージが出ていないかを確認するのも有効

$ dmesg | grep NVRM

例えば以下のようなエラーが出たりする(以下はサーバファームウェアが対応していなかった場合の例):

[ 1490.618920] NVRM: This PCI I/O region assigned to your NVIDIA device is invalid:
NVRM: BAR1 is 0M @ 0x0 (PCI:0000:0c:00.0)
[ 1490.618926] NVRM: The system BIOS may have misconfigured your GPU.
[ 1490.618962] NVRM: This PCI I/O region assigned to your NVIDIA device is invalid:
NVRM: BAR1 is 0M @ 0x0 (PCI:0000:84:00.0)

Linux バージョンの確認

CUDA8.0 は CentOS 6.x, 7.x に対応。今回は 7.3.1611 を使用。確認方法は以下:

$ uname -m && cat /etc/*release
x86_64
CentOS Linux release 7.3.1611 (Core)
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

CentOS Linux release 7.3.1611 (Core)
CentOS Linux release 7.3.1611 (Core)

gcc バージョンの確認

CUDA8.0 は gcc 4.8.2 が必要。今回は 4.8.5 を使用。確認方法は以下:

$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-11)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

カーネルバージョンの確認

CUDA8.0 は Kernel 3.10 が必要。今回は 3.10.0-514.el7 を使用。確認方法は以下:

$ uname -r
3.10.0-514.el7.x86_64

kernel headers と development packages の確認

CUDA ドライバインストールにはカーネルと同じバージョンの kernel headers と development packages が必要。今回は 3.10.0-514.el7 がインストールされていなければならない。確認方法は以下:

$ yum list installed | grep kernel
abrt-addon-kerneloops.x86_64          2.1.11-45.el7.centos             @anaconda
kernel.x86_64                         3.10.0-514.el7                   @anaconda
kernel-devel.x86_64                   3.10.0-514.el7                   @anaconda
kernel-headers.x86_64                 3.10.0-514.el7                   @anaconda
kernel-tools.x86_64                   3.10.0-514.el7                   @anaconda
kernel-tools-libs.x86_64              3.10.0-514.el7                   @anaconda

インストールされていない場合は以下でインストールする:

$ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)

CUDA Toolkit (Runfile) のダウンロード

ファイルは https://developer.nvidia.com/cuda-downloads からダウンロードする。今回は Runfile をダウンロードする。バージョンは 8.0.44:

$ wget https://developer.nvidia.com/compute/cuda/8.0/prod/local_installers/cuda_8.0.44_linux-run

※ 過去に CUDA をインストールした場合はこちらの手順に従ってアンインストールする必要あり

CUDA のインストール(Runfile を使用)

Runfile によりインストールされるものは以下の通り:

  • NVIDIA Driver
  • CUDA Toolkit
  • CUDA Sample

Nouveau ドライバをオフにする

Nouveau ドライバ有無の確認には以下のコマンドを使用。何かが表示された場合にはオフにする必要がある:

$ lsmod | grep nouveau

オフにするには /etc/modprobe.d/blacklist-nouveau.conf を以下の内容で作成し、

$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf

---
blacklist nouveau
options nouveau modeset=0

カーネル initramfs を以下のコマンドを使って再生成する:

$ sudo dracut --force

デバイスファイルの確認

デバイスファイル /dev/nvidia* が存在し、アクセス権 0666 (rw-rw-rw-)であることを確認する。このファイルは CUDA ドライバーが NVIDIA ドライバーカーネルと情報をやり取りするのに必要。NVIDIA ドライバーを使うアプリが存在するとこのファイルは自動生成されるとのこと。ファイルが無い場合には以下のスクリプトを使って生成する。

#!/bin/bash

/sbin/modprobe nvidia

if [ "$?" -eq 0 ]; then
  # Count the number of NVIDIA controllers found.
  NVDEVS=`lspci | grep -i NVIDIA`
  N3D=`echo "$NVDEVS" | grep "3D controller" | wc -l`
  NVGA=`echo "$NVDEVS" | grep "VGA compatible controller" | wc -l`

  N=`expr $N3D + $NVGA - 1`
  for i in `seq 0 $N`; do
    mknod -m 666 /dev/nvidia$i c 195 $i
  done

  mknod -m 666 /dev/nvidiactl c 195 255

else
  exit 1
fi

/sbin/modprobe nvidia-uvm

if [ "$?" -eq 0 ]; then
  # Find out the major device number used by the nvidia-uvm driver
  D=`grep nvidia-uvm /proc/devices | awk '{print $1}'`

  mknod -m 666 /dev/nvidia-uvm c $D 0
else
  exit 1
fi

CUDA インストールの実行

Runfile を実行する:

$ sudo sh cuda_8.0.44_linux-run --silent

PATH の追加

PATH と LD_LIBRARY_PATH に以下を追加する(64bitの場合):

$ export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}}
$ export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64\
                         ${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away