Ubuntu Weekly Recipe

第456回 Ubuntu 16.04 LTSでCUDA 8.0を使用する

この記事を読むのに必要な時間:およそ 15 分

NVIDIAが提供するCUDAは,NVIDIA製のGPUを用いて高速な並列処理を行うためのプラットフォームであり,ツールキットです。ここ数年話題になっている深層学習でも基本的な技術の一つとして採用されています。今回はこのCUDAの最新版である8.0をUbuntu 16.04 LTSにインストールする方法を紹介しましょう。

CUDAを使うために必要なハードウェア

グラフィック処理の心臓部であるGPU(Graphics Processing Unit)は,その用途からシェーダーの汎用化・並列化が進んだ結果,特定の精度の単純な計算処理であればCPUの数倍の能力を持つまでに至りました。これは3Dゲームを主体としたCGのレンダリングに使われるべく進化したのですが,せっかくの計算能力をゲームだけに使うのはもったいないとして生まれたのが「GPGPU(General-Purpose computing on Graphics Pocessing Units)⁠という考え方です。ただしグラフィックス向けのAPIを使って汎用的な計算をさせるとなると,そのプログラミングには幅広い知識が必要です。NVIDIAはC/C++のような「普通の」言語でGPUを操作できる開発環境である「CUDA」を提供することで,GPGPU向け開発のハードルを一気に下げたのです※1)⁠

※1
当然のことながらCUDAはNVIDIA製のGPUでしか動作しません。それに対してIntelやAMDも含む多くのハードウェアをサポートしたより汎用的でオープンなフレームワークとしてOpenCLが存在します。OpenCLはNVIDIA製のGPUもサポートしていますので,汎用的なGPGPU向けコードを書きたいのであればOpenCLを使うという手も存在するでしょう。ただしCUDAはOpenCLに比べると,NVIDIA製GPUのハードウェア性能を最大限引き出せるように設計されています。GPGPUを使いたいということはとどのつまり性能こそが最重要であるケースですので,NVIDIA製GPUを使う限りにおいてはあえてOpenCLを選択する理由は少ないものと思います。

CUDAを使うのであればCUDAに対応したGPUが必要です。たとえばGPGPU専用として高性能コンピューティング向けに提供されているTeslaシリーズはもちろんのこと,ワークステーション向けのQuadroやデスクトップ・ゲーム向けのGeForce,モバイル向けのTegraにいたるまで,ここ数年でNVIDIAからリリースされたGPUやGPUを組み込んだチップであれば,大抵はGPGPU用途としてCUDAを利用可能です。

特にアーキテクチャーを刷新したKepler以降のGPUがよく使われています。昨年リリースされたPascalを搭載したGPUはもちろんのこと,Pascalの登場によって旧世代となったMaxwellを搭載するGPUもハイエンド側の価格が下がっており,⁠深層学習などを人間が学習する」ためにお手頃な存在となっているようです。今から入手するのであれば,Maxwellアーキテクチャーを搭載したGPUのうち値段が下がっているものか,Pascalアーキテクチャーを搭載したGPUになるでしょう。予算と電源が許せばよりハイエンドなGPUが選択肢に,⁠とりあえず試す」だけなら安めで低消費電力なGPUが選択肢になります。⁠用途に合わせてグレードを選ぶ」必要はあるものの,Kepler以降であればどのグレードであってもCUDAがまったく使えないということはまずありません※2)⁠

※2
Keplerの1つ前のアーキテクチャーである「Fermi」については,CUDA 8.0で「Deprecated(廃止予定)⁠となりました。次のリリースのCUDAからはFermiアーキテクチャーをサポートしなくなります。なおGPUドライバーについては,引き続きFermiもサポートするようです。

GPUを動かすようなスペースがないということであれば,クラウドのGPUインスタンスを使うという手もあります。

Amazon EC2のg2.2xlargeだとKepler世代のGPUを東京リージョンのオンデマンドインスタンスで「$0.898/1時間」ぐらいの価格になるようです。100時間ぐらいであればGPUボードを買うよりも安いですし,CUDA用に新しいマシンを用意したり,さらには電気代や場所代,ご家庭内での立場も考えると,大抵の人にとってはもっと長時間使ってもペイすることでしょう。

GPUインスタンスそのものにいくつかの制約はあるものの,基本的にLinuxが起動してしまえばあとは物理マシンと同じです。第454回で紹介したNVIDIAドライバーのインストール方法もそのまま使えます。ディスプレイの出力先がNVIDIAのGPUになっており,変更するすべはないという点については注意が必要です。UbuntuのクラウドイメージはUbuntu Cloud Image Finderで検索すると良いでしょう。Amazon EC2であればこのページのリンクをクリックするだけで,インスタンスの立ち上げページに移動できます※3)⁠

※3
昔ながらのPV/AKIなイメージが必要な場合はAmazon EC2 AMI Locatorのページを参照してください。ただしGPUインスタンスを使う場合はHVMベースのインスタンスが必要ですし,PVベースのインスタンスを作る理由はほぼないでしょう。

Ubuntuの公式リポジトリのCUDAについて

CUDAは残念ながらプロプライエタリなソフトウェアです。しかしながらUbuntuの公式リポジトリにもそのパッケージは存在します。

$ apt show nvidia-cuda-toolkit
Package: nvidia-cuda-toolkit
Version: 7.5.18-0ubuntu1
Priority: extra
Section: multiverse/devel
(中略)
Description: NVIDIA CUDA development toolkit
 The Compute Unified Device Architecture (CUDA) enables NVIDIA
 graphics processing units (GPUs) to be used for massively parallel
 general purpose computation.
 .
 This package contains the nvcc compiler and other tools needed for building
 CUDA applications.
 .
 Running CUDA applications requires a supported NVIDIA GPU and the NVIDIA
 driver kernel module.

Ubuntu 16.04 LTSでインストールできるパッケージ版のバージョンはCUDA 7.5となります※4)⁠それに対してCUDAの最新バージョンは昨年9月末にリリースされたCUDA 8.0です。PascalアーキテクチャーのサポートUnified Memoryの機能強化Mixed-Precisionコンパイラーの機能拡張Ubuntu 16.04 LTSのサポートなどなど,CUDA 8.0にはさまざまな機能拡張や不具合の修正が行われているため,今からCUDAをインストールするのであれば,最新の8.0を導入したいところでしょう。また公式リポジトリのパッケージ版のCUDAは,NVIDIAのドライバーについても公式リポジトリのパッケージを使う前提になっています。つまり第454回のように,NVIDIA製のドライバーをスクリプトでインストールした場合は,このパッケージは使えません。Maxwellアーキテクチャー以前のGPUに対して,デスクトップ用途でCUDAをお手軽に利用したい場合のみパッケージ版が選択肢となります。

※4
ちなみに16.10や開発中の17.04であれば,パッケージ版のCUDA 8.0を導入可能です。

そこで,今回もNVIDIA製のスクリプトを使ってCUDA 8.0をインストールしましょう。

CUDA 8.0をインストールするいくつかの方法

最初にCUDA 8.0をインストールするスクリプトをダウンロードします。CUDA 8.0のダウンロードページからLinuxx86_64Ubuntu16.04を順番に選択してください。

図1 CUDAのダウンロード

画像

現在のCUDAは,ホストとして32bitアーキテクチャーを利用できません。32bit版のUbuntuでは動きませんので注意してください。また,今回はタイトルにもあるようにUbuntu 16.04 LTSへとインストールしますが,手順としては16.04固有の話はないため,Ubuntu 14.04 LTSでもそのまま利用できるはずです。

最後に「Install Type」として次の4つのタイプが提示されます。

runfile (local)
「全部入り」の実行スクリプトです。CUDAのツールキットはもちろんのこと,サンプルコードやドライバーも同梱されています。そのためサイズが1.4GBと非常に大きくなっています。
deb (local)
「runfile (local)」の中身を個別にDebianパッケージにしたものです。ダウンロードするサイズは,さらに大きく(1.9GB)なります。
deb (network)
NVIDIAが提供するパッケージリポジトリを登録するためのパッケージです。上の2つに比べるとサイズは小さくなりますが,このパッケージをインストールしたあとに,CUDA本体をパッケージマネージャーを用いてネットワーク越しにダウンロード・インストールする必要があります。
cluster (local)
名前からの推測ですがクラスタ向けのインストールパッケージです。原則としてライブラリとドライバーのみを複数のノードにインストールすることを想定していて,CUDAコンパイラーなどは「開発用パッケージ」という扱いになっています。単に「普通のPCでCUDAを試す」場合は,このタイプを使うことはありません。

デスクトップ用途で使うのであれば「deb (network)」をおすすめします。このタイプであればNVIDIAのパッケージリポジトリが追加されるため,CUDAの新バージョンへの更新が簡単になります。またNVIDIA製ドライバーの比較的新しいバージョンも同じリポジトリに登録されているため,このパッケージをインストールするだけでどちらも新しいバージョンに保てるというメリットがあるのです。

「deb (local)」は一度ダウンロードした上で,複数のマシンにデプロイしたい場合に有用です。こちらは/var/cuda-repo-8-0-localにローカルパッケージリポジトリを作成し,そこからCUDA関連のパッケージをインストールすることになります。たとえばリポジトリ用のインスタンスを1つ用意し,そのインスタンスに「deb (local)」をインストールします。他のマシンはリポジトリ用インスタンスからパッケージをインストールすれば,インターネット上のトラフィックは最小限で済みます。

ただし「deb (network)」にしろ「deb (local)」にしろ,2017年1月時点でインストールできるNVIDIA製ドライバーは367.48と,Ubuntu公式リポジトリにある367.57より古いバージョンになっています。また367はGeForce GTX 1050/1050 Tiなどをサポートしていません。また,パッケージ版をそのままインストールしようとするとデスクトップグラフィック向けのライブラリやX Window Systemなども一緒にインストールします。インストールするプログラムをある程度制限したい場合は,⁠runfile (local)」が最善の方法になるでしょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。

コメント

コメントの記入