インストールガイド CentOS 7.5 minimal with MATE & Nvidia CUDA 9.2
インストール時におこった問題については下記記事で解説
0. 理由 ※飛ばしていいです
CentOSのkernelをアップデートしたらnvida-smiが後述のようになったので、ドライバを入れ直そうとしたらぐちゃぐちゃになっちゃったので、もうやりなおすことにした。
$ nvidia-smi NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.
下記サイトを参考にしてシングルユーザモードでログインして、いろいろやったけど結局CentOSが立ち上がらなくなったのでもう諦めた。
参考:CentOS 7でrootパスワードをリセットする方法
ちなみに最終的には
[赤いなにか]a start job is running for wait for plymouth boot screen to quit
とかでて、左に赤いのがくるくるまわってた。
1. 準備
焼き方は下記を参考にして、RufusってソフトをつかってWindows10のPCで焼きました。Macの人は別途調べてね。
2. CentOS 7.5 インストール
インストーラ起動
CentOSのはいったUSBメモリを刺し、BootをUSBにして起動したところでいきなりつまづいた。
failed to map image memory
が出て、インストールができない。参考サイトをもとに、
1. 「Install CentOS 7」を選択した状態で、eまたはtabキーを押してbootオプション編集画面を表示
2. bootオプションの一番後ろのquiet
を削除してnoacpi nomodeset
を追記してCtrl+XまたはEnterキーを押す
3. 立ち上がる
参考:https://syobon.jp/2017/10/02/ryzen-install-battle-case-of-centos-7/
インストール設定
たちあがったあとは案内に従ってインストールしていく。
* 言語:日本語
* キーボードレイアウト:英語US ※お使いのキーボード配列参照で
* KDUMPは無効 ※お好みで
* ソフトウェア選択はMinimalのみ ※必要なものは後で入れる+GNOME3が嫌い
* インストール先 その他のストレージオプション->パーティション構成->パーティションを自分で構成する->完了
CentOS Linux Linux 7.5 1804 for x86_64を選択してマイナスをして空っぽにしたあと、自動的に作成をする。(新規でインストールしたいため)homeを選択してマイナス、とroot(/)をを選択してマイナスする。プラスをクリックしてマウントポイントを(/)にし、ストレージの残り全部をを割り当てる。
最終的に、/boot 1024Mib /boot/efi 953MiB / 214.14GiB swap 7681MiB
使用可能 1592.5 KiB 全ての領域 223.57GiB
完了をクリック
* 右下のインストールを開始
* インストール中にROOTパスワード、ユーザを作成する。ユーザを作成時に管理者(つまり、wheelグループにいれること)にチェック ※sudo を使うため
インストールがおわったら再起動される。
3. CentOSの設定
ネットワークの設定
再起動後、ログインしたらまずはネットワークの設定をする。
下記サイトを参考に、「NetworkManager TUI(nmtui)」をつかって設定をする。
1. $nmtui
で起動
2. Edit a connection を選択
3. Addを選択してEnter、Ethernetを選択
4. IPv4 CONFIGURATION のAutomaticをEnterして、Manualに変更する。
5. Showを押すと設定のリストが現れる
6. 固定IPを振り当てる。案内に従ってIPアドレス(xxx.xxx.xxx.xxx/yy)、デフォルトルート、DNS、を設定する ※xxxはアドレスyyはサブネットマスク ネットマスク早見表
7. 「Automatically connect」にチェックを入れ自動接続するようにする
8. $systemctl restart network
でネットワークの反映
9. $ip addr
で反映されているか確認
10. $ping アドレス
でパケット送って返ってくるかみるのもあり。
*参考:NetworkManager 使用方法(nmtui編)
アップデート
ネットワークの設定がおわったら、yumでアップデートをかける。その後必要なものをインストールしていく。
1. コマンドを実行$sudo yum -y update
(-yはall yesの意味)
2. 一旦$reboot
で再起動をかける
3. kernelが最新かどうか確認する。OSに対する最新カーネルはRHEL公式で確認できる
$ cat /etc/centos-release (OSの確認) $ uname -a (カーネルの確認)
- 最新カーネルがあたっていればOK
4. CUDA9.2 の準備
基本的には公式「 NVIDIA CUDA INSTALLATION GUIDE FOR LINUX DU-05347-001_v9.2 | August 2018 WEB版」 (PDF版)に沿ってインストールしていく。
デバイス状況の確認
Minimalインストールをしたので、lspciコマンドが入っていない。下記サイトを参考にインストールし、実行する。このPCにはGTX1070Tiが搭載されている。
公式該当ページ
$ yum install pciutils (lspciのインストール) $ lspci | grep VGA (グラフィックスカードの確認) 00:02.0 VGA compatible controller: Intel Corporation Device 3e91 01:00.0 VGA compatible controller: NVIDIA Corporation GP104 [GeForce GTX 1070 Ti] (rev a1)
インストールに必要なものをインストール
$ sudo yum install gcc $ sudo yum install gcc-c++ $ gcc --version (確認) gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28) 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. $ g++ --version (確認) g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28) 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.
$ sudo yum install kernel-devel-$(uname -r) kernel-headers-$(uname -r)
- CUDAはdkmsを要求する。公式該当ページ
Dynamic Kernel Module Support (DKMS) はカーネルのソースツリーの外にソースが存在する Linux カーネルモジュールの生成を可能にするプログラム/フレームワークです。新しいカーネルがインストールされたときに DKMS モジュールは自動的にリビルドされます。Dynamic Kernel Module Supportより
$ sudo yum install epel-release $ sudo yum install dkms $ dkms --version (確認) dkms:2.6
dkms problem while installing CUDA 8 on RHEL 7.3 ppc64le
4. CUDAToolkitをダウンロードするため、GUI環境のMATEをインストールする。startx
で立ち上がればOK
$ sudo yum groupinstall "MATE Desktop" -y $ sudo yum -y groups install "Server with GUI" $ echo "exec /usr/bin/mate-session" >> ~/.xinitrc $ startx (GUIを立ち上げる)
ドライバの準備
CentOSにはデフォルトでnouveau
というグラフィックドライバがある。これがNvidiaドライバと衝突するため、無効化する。公式該当ページ
nouveau ドライバの確認をする。
$ lsmod | grep nouveau
viで設定ファイルを作成・編集する。
$ sudo vi /etc/modprobe.d/blacklist-nouveau.conf
ファイルに下記を記入する。i
キーで編集モード、入力して追加、Esc
で戻る、:wq
でセーブして終了。
blacklist nouveau options nouveau modeset=0
現在のkernel initramfsのバックアップをとり、nouveauを無効化したkernel initramfsを再生成する。
$ mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img $ sudo dracut --force
再起動する。
$ reboot
コマンドで何も表示されなければnouveauがロードされていないのでOK
$ lsmod | grep nouveau
補足:代わりのドライバとしてi915ってのが読み込まれてる。ちなみにビデオ出力はグラフィックスボードからではなく、マザーボードからにしてある。グラボはGPGPUとしてのみ使うため。
$ lsmod | grep i915 i915 1639910 0 iosf_mbi 14990 2 i915,intel_rapl i2c_algo_bit 13413 1 i915 drm_kms_helper 177166 2 i915,nvidia_drm drm 397988 4 i915,drm_kms_helper,nvidia_drm video 24538 1 i915 i2c_core 63151 7 drm,i915,i2c_i801,i2c_hid,drm_kms_helper,i2c_algo_bit,nvidia
5. CUDA9.2のインストール
ダウンロード
コマンドでGUIを起動し、firefoxでダウンロードサイトを開く。
$ startx
あるいは、ランレベルの変更でGUIモードに切り替える。その後再起動する。ログインしたあとfirefoxでダウンロードサイトを開く。
$ systemctl set-default graphical.target $ reboot
CUDAToolkit公式のDpwnloadNowをクリックして最新のCUDAをダウンロードする。今回はrunファイルを選択する。RPMだとのちのち面倒くさい(後述)。
Operating System : Linux Architecture : x86_64 Distribution : CentOS Version : 7 Installer Type : runfile(local) ※お好みで
ベースインストーラ:cuda_9.2.148_396.37_linux.run
と
パッチファイル:cuda_9.2.148.1_linux.run
を
ダウンロードする。
インストール
ドライバもインストールするため、コマンドでCUIモードに変えてからインストールを行う。その後再起動する。
$ systemctl set-default multi-user.target $ reboot
ログインをしたあと、runファイルのパーミッション・アクセス権を変更する。パーミッション早見表
$ sudo chmod 705 cuda_9.2.148_396.37_linux.run $ sudo chmod 705 cuda_9.2.148.1_linux.run
runファイルを実行することでインストールする。公式該当ページ
$ sudo ./cuda_9.2.148_396.37_linux.run --silent $ sudo ./cuda_9.2.148.1_linux.run --silent
パスを通す
効率的にCUDAを使うため、pathを設定する。公式該当ページ .barhrcをviで開く。
$ vi ~/.bashrc
.bashrcに下記を追加する。i
キーで編集モード、入力して追加、Esc
で戻る、:wq
でセーブして終了。
$ export PATH=/usr/local/cuda-9.2/bin${PATH:+:${PATH}} $ export LD_LIBRARY_PATH=/usr/local/cuda-9.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
.barhrcを反映する。その後パスを確認する。
$ source ~/.bashrc $ echo $PATH
アンインストール
インストールに問題があった場合は下記コマンドにてアンインストールができる。公式該当ページ
CUDA toolkitのアンインストール
$ sudo /usr/local/cuda-9.2/bin/uninstall_cuda_9.2.pl
Nvidia ドライバのアンインストール
$ sudo /usr/bin/nvidia-uninstall
6. CUDAとGPUの確認
ドライババージョン確認
$ cat /proc/driver/nvidia/version NVRM version: NVIDIA UNIX x86_64 Kernel Module 396.37 Tue Jun 12 13:47:27 PDT 2018 GCC version: gcc version 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC)
NVCCコンパイラ
CUDA用のコンパイラの動作確認
公式「 CUDA COMPILER DRIVER NVCC TRM-06721-001_v9.2 | August 2018 WEB版」 (PDF版)
$ nvcc --version nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2018 NVIDIA Corporation Built on Tue_Jun_12_23:07:04_CDT_2018 Cuda compilation tools, release 9.2, V9.2.148
NVIDIA-SMI管理ツール
NVIDIA GPUデバイスの管理ツール「NVIDIA System Management Interface」を使う。
$ nvidia-smi Thu Aug 23 04:15:36 2018 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 396.37 Driver Version: 396.37 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 GeForce GTX 107... Off | 00000000:01:00.0 Off | N/A | | 0% 47C P0 31W / 180W | 0MiB / 8119MiB | 5% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
例えば、1秒ごとに温度を表示したい場合は下記コマンドを実行する。ctrl + c
で終了する。
$ nvidia-smi -q -i 0 -d TEMPERATURE -l 1 ==============NVSMI LOG============== Timestamp : Thu Aug 23 04:18:34 2018 Driver Version : 396.37 Attached GPUs : 1 GPU 00000000:01:00.0 Temperature GPU Current Temp : 48 C GPU Shutdown Temp : 99 C GPU Slowdown Temp : 96 C GPU Max Operating Temp : N/A Memory Current Temp : N/A Memory Max Operating Temp : N/A
サンプルの実行
公式が提供するCUDAのサンプルプログラムをコンパイルして実行する。公式該当ページ
下記コマンドを実行すると、ホームディレクトリの直下にNVIDIA_CUDA-9.2_Samples
ディレクトリが作成される。その後ディレクトリに移動して、MAKEをつかってビルドすると、実行ファイルが作成される。※このmakeは時間がかかる。
$ /usr/local/cuda-9.2/bin/cuda-install-samples-9.2.sh ~/ $ cd ~/NVIDIA_CUDA-9.2_Samples $ make
ビルドがおわったら、実行できる。
サンプルの一例の実行 公式該当ページ
$ cd ~/NVIDIA_CUDA-9.2_Samples/1_Utilities/deviceQuery/ $ ./deviceQuery ./deviceQueryDrv Starting... CUDA Device Query (Driver API) statically linked version Detected 1 CUDA Capable device(s) Device 0: "GeForce GTX 1070 Ti" CUDA Driver Version: 9.2 CUDA Capability Major/Minor version number: 6.1 Total amount of global memory: 8120 MBytes (8513978368 bytes) (19) Multiprocessors, (128) CUDA Cores/MP: 2432 CUDA Cores GPU Max Clock rate: 1683 MHz (1.68 GHz) Memory Clock rate: 4004 Mhz Memory Bus Width: 256-bit L2 Cache Size: 2097152 bytes Max Texture Dimension Sizes 1D=(131072) 2D=(131072, 65536) 3D=(16384, 16384, 16384) Maximum Layered 1D Texture Size, (num) layers 1D=(32768), 2048 layers Maximum Layered 2D Texture Size, (num) layers 2D=(32768, 32768), 2048 layers Total amount of constant memory: 65536 bytes Total amount of shared memory per block: 49152 bytes Total number of registers available per block: 65536 Warp size: 32 Maximum number of threads per multiprocessor: 2048 Maximum number of threads per block: 1024 Max dimension size of a thread block (x,y,z): (1024, 1024, 64) Max dimension size of a grid size (x,y,z): (2147483647, 65535, 65535) Texture alignment: 512 bytes Maximum memory pitch: 2147483647 bytes Concurrent copy and kernel execution: Yes with 2 copy engine(s) Run time limit on kernels: No Integrated GPU sharing Host Memory: No Support host page-locked memory mapping: Yes Concurrent kernel execution: Yes Alignment requirement for Surfaces: Yes Device has ECC support: Disabled Device supports Unified Addressing (UVA): Yes Device supports Compute Preemption: Yes Supports Cooperative Kernel Launch: Yes Supports MultiDevice Co-op Kernel Launch: Yes Device PCI Domain ID / Bus ID / location ID: 0 / 1 / 0 Compute Mode: < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) > Result = PASS
サンプルについては「CUDA Samples TRM-06704-001_v9.2 | August 2018 (WEB版)」(PDF版) にて解説がある。