お気に入りタイトル/ワード

タイトル/ワード名(記事数)

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

LINEで4Gamerアカウントを登録
Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
特集記事一覧
注目のレビュー
注目のムービー

メディアパートナー

印刷2014/07/22 12:00

テストレポート

Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 2014年7月16日,NVIDIAは,GPUコンピューティング開発者イベント「GTC Japan 2014」を開催した。2014年のGTC Japanでは,組み込み機器関連のセッションが大幅に増えていた,という話は先のレポートでお伝え済みだが,そんななかでも注目したいのが,事前登録が必要でかつ有償となっていた「Jetson TK1」体験セッションだ。

Jetson TK1
画像集#005のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

セッションで講師を務めたのはCUDAエヴァンジェリストであるNVIDIAのMark Ebersole(マーク・エバーソール)氏
画像集#002のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
 NVIDIAの組み込み向け最新SoC(System-on-a-Chip)である「Tegra K1」を搭載した開発用ボードであるJetson TK1は,国内流通が始まってはいるものの,その数が少なく,触れている人もまだそれほど多くない。
 今回4Gamerでは,そんなJetson TK1を実際に体験できるというセッションへ参加できたので,「Tegra K1搭載のワンボードコンピュータ」に触ってきた模様を簡単にまとめてみたいと思う。ゲームと直接の関係はないが,Tegra K1が気になっている人や,CUDAに興味がある人はチェックしてほしい。


ようこそJetson TK1へ


 さて,セッションルームでは,各席にディスプレイやキーボードとの接続を終えたJetson TK1が置いてあり,受講者はすぐにJetson TK1を体験できるようになっていた。

Jetson TK1体験セッション会場に用意されていた各受講者用デスクの模様
画像集#003のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

Jetson TK1の製品イメージ
画像集#004のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
 ディスプレイとの接続はHDMI(Type A)端子経由。Jetson TK1は1ポートのUSB 3.0ポート(Type A)を持つので,ここにUSBハブを接続すれば,その先にキーボードやマウスなどの周辺機器を接続できる。上の写真で気づいた人もいるだろうが,今回のセッションではコンピュータビジョンのサンプルを動かすために必要な周辺機器として,エレコム製のWebカメラ「UCAM-C0220FBBK」もハブ経由で接続されていた。
 キーボードやマウスは,USB接続のものならメーカーは不問で,Webカメラも,よほど特殊な仕様でない限り接続できるとのことだった。

 電源ユニットは,ノートPCに付属してきそうなACアダプターで,入力はAC100-240V/1.5A,出力はDC12V/5.0Aというスペックだ。これをJetson TK1の電源入力端子に接続すると,いきなりJetson TK1上の冷却ファンが回り始めて起動する仕様になっていた。万が一起動しない場合は,Jetson TK1上に用意された小さな[Reset]ボタンもしくは[Soft Power]ボタンを押すと再起動できるようだ。

 起動後,最初にやるべきこととして指導されたのは,[Ctrl]+[Alt]+[T]キーでコマンドプロンプトを出してからの,

> setxkbmap -layout jp

の入力で,これは,キーボードのレイアウトを日本語仕様へ変更する操作に相当する。

Task #0として提示された最初の課題。電源を入れてキーボードレイアウトを変更する
画像集#006のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 起動してしまえば,ただのUbuntu搭載PCといった感じで,LANケーブルでネットワークと接続すれば,プリインストールの「Mozilla Firefox」からWebブラウジングも普通に行えてしまう。

有線でインターネットに接続したJetson TK1から4Gamerを開いたところ
画像集#007のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた


「CUDAのプログラミングの基礎の基礎」を体験


 ここで,「Hello」を出力するだけの基礎的なプログラムの入力が課せられた。
 CUDAは,C言語ベースのプログラミング言語なのだが,「用意したデータに対してプログラムを実行させる」という概念の拡張がなされている。それを参加者に実感してもらおうというのが狙いだ。
 今回の「Hello」では,2×2のスレッドを立ち上げて,各スレッドから「Hello」を出力するようなプログラムになっていた。

プログラム(上)とその実行結果(下)
画像集#008のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
画像集#009のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 サンプルリストはEbersole氏がスライドで示していたので,実際にやることはといえば,画面のサンプルを打ち込み,コンパイルして実行するだけだ。
 ただ,CUDAの完全な初心者からすれば,テキストエディタとして「gedit」が用意されているとか,CUDAのソースプログラムは拡張子「.cu」で作成するとか,コンパイラは「nvcc」であるとかいった基礎的なことをここで学べるのであった。


CUDA 6のサンプルプログラムを実行する


 続いての課題は,Jetson TK1にプリインストールされているCUDA 6のサンプルプログラムをコンパイルして実行することである。

CUDAのサンプルプログラムを実行するのがお次の課題だ
画像集#010のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 ここではまず,コマンドプロンプトからCUDA 6のサンプルプログラムをコピーするところから始まる。具体的には,

> cuda-install-samples-6.0.sh .

と入力することになる。最後のスペースとピリオドを忘れずに。

 続いて,

> cd NVIDIA_CUDA-6.0_Samples/5_Simulations/smokeParticles/

と入力し,カレントディレクトリをサンプルプログラム階層の下とする。長いパス名は中途まで打ち込んで[TAB]キーを押すと補完入力を行ってくれるので利用したい。
 コンパイルは,

> make

でOK。プログラムを書き換えない限り,コンパイルは一度実行すればそれでいい。
 実際のプログラム実行は,

> ../../bin/armv7l/linux/release/gnueabihf/smokeParticles

で行える。「smokeParticles」のところを別のプログラム名にすれば,別のサンプルプログラムをコンパイルして実行することも可能だ。

 サンプルプログラムを確認してみたところ,「NVIDIA_CUDA-6.0_Samples」階層下にはさまざまなものを確認できたので,Jetson TK1を入手できたら,いろいろと実行してみるといいのではなかろうか。見た目的に面白いのは,前出の「5_simulations」以外だと「2_Graphics」あたりか。


コンピュータビジョンのサンプルプログラムを実行する


続いての課題はOpenCVサンプルの実行なのだが,その前にWebカメラの動作確認
画像集#011のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
 次はWebカメラを使う実験である。
 具体的にはコンピュータビジョン用プログラミングAPI「OpenCV」のサンプルコードをJetson TK1上で実行する課題となる……のだが,その前に,Webカメラの動作を確認する必要がある。
 このカメラ動作確認プログラムは,「検出した肌色部分を緑色にマーキングする」というもので,人の顔が緑色にマーキングされればOKとなる。

肌色に緑色マーカーが付く実験プログラム。これがうまく動けばWebカメラは正常に動作していると見なせる
画像集#012のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 Webカメラの動作が完了したところで,実際のCPUで実装したOpenCVサンプルプログラムを実行する。
 実行するのは,監視カメラのように定点設置されたカメラの映像から,動体と背景を分離するアルゴリズム「混合正規分布」(MOG:Mixture of Gaussian Distribution)のサンプルだ。

 コンパイル後,

> ./bgfg_segm_cpu -c 0

として実行されるのがCPU版MOGアルゴリズムとなる。実効フレームレートにして約5〜7fpsといったところだ。

CPUで実装したMOGアルゴリズムの実行結果。左にずらっと並んでいるのがフレームレートで,右上に4つ並んでいるのが撮影された映像とリアルタイム処理の結果だ。4つある映像のうち,右上が撮影された映像で,右下は,プログラムの起動後に動いていないと判断されたピクセルで,実行中のプログラムが背景として認識した部分になる。ディスプレイの前に座って,ほとんど動くことなく作業していたら,筆者の身体の一部も背景として認識されてしまった(笑)
画像集#013のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 続いては,このサンプルプログラムをGPU版に改造する課題が出されたのだが,セッション時間が短いこともあり,今回は,

> cp bgfg_segm_solution.cpp bgfg_segm_gpu.cpp

と打ち込み,模範回答プログラム「bgfg_segm_solution.cpp」を「bgfg_segm_gpu.cpp」としてコピーしてコンパイルするのみに留まった。具体的には,

> make gpu
 
 でコンパイルし,

> ./bgfg_segm_gpu -c 0

で実行する。

プログラムをGPU用にポーティングする課題
画像集#014のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 同一アルゴリズムを実行しているので,処理内容に変わりはない一方で,実効フレームレートは最大で10倍以上向上することを確認できた。これこそがGPUパワーの恩恵であり,Jetson TK1,そしてTegra K1の底力というわけである。

実行結果は変わらないが,フレームレートに注目すると,24〜60fps程度にまで向上しているのが分かる。最大では10倍以上の性能向上だ
画像集#015のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた


Jetson TK1でGPIOを制御する


画像集#016のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
 本稿の序盤で触れたとおり,Jetson TK1は組み込み機器向けの開発評価ボードである。なので「Tegra K1の演算性能を活かして,何か別のデバイスを操作したい」とか「何か別のデバイスへ出力したい」といった具合に,外部機器との連動を望むユーザーも多いはずである。
 Jetson TK1には,先に述べたUSB 3.0のほか,シリアルポートも用意されているが,それよりもさらにローレベルな入出力を行うためのGPIO(General Purpose Input & Output)ポートも備わっている。

GPIOはこのスライドでいうところの「Expansion I/O」部にある
画像集#017のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 ここまでの課題は,どちらかといえば「コンピュータとしてJetson TK1をどう使うか」が対象となっていたが,最後の課題は,GPIOを使って外部デバイスとの連動を目指すものとなった。
 とはいえ,短い時間でそれほど高度なことはできないので,接点スイッチとLEDを組み合わせたシンプルな実験が行われた。

 最初の実験は,43番ピンと45番ピンに差し込まれたLEDを点滅させるという課題だ。
 プログラムは「~/lab/gpio/」フォルダに用意されているので,実際にやることは,

> sudo python ~/lab/gpio/basic_blink.py

として実行させるだけである。

GPIOのクローズアップ(左)と課題(右)
画像集#018のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた 画像集#019のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた


LEDを点滅させるプログラムはスクリプト言語Pythonで書かれたものだった
画像集#020のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
 LED制御のプログラムはスクリプト言語Pythonで書かれていたが,Jetson TK1における基本的なGPIO経由の入出力処理はPyhtonで制御することになっている。このあたりは,基礎実験や教育用のワンボードコンピュータとして知られる「Raspberry Pi」とよく似た部分といえるだろう。

 最後の課題は,GPIO側の46番ピンと49番ピンに接点スイッチを設け,このオン/オフを仮想的な周辺機器からの入力とし,それに呼応する形でプログラム側でLEDを点灯させるというものだ。

最後の課題
画像集#021のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

 こちらもプログラム自体は保存済みなので,

> sudo python ~/lab/gpio/advanced_blink.py

プログラム冒頭,「BLINK_INTERVAL =」の数値を変えると明滅速度を変更できる
画像集#022のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
として実行させるだけだが,接点スイッチを押している間だけLEDが点滅することを確認できた。
 追加のサブ課題として,LEDの点滅タイミングを変更するというのが与えられたが,これはプログラムを開いて「BLINK_INTERVAL =」の数値を変えるだけでOK。Pythonはスクリプト言語なので再コンパイルの必要もなく,すぐに数値変更の結果を反映した形で実行できるのだ。



“遊べる”評価ボードといえるJetson TK1


 まさに入門といった内容だったが,いかがだったろうか。
 Jetson TK1は組み込み機器向けの製品開発評価プラットフォームで,今のところ流通量も非常に少ないが,国内ではオリオスペックが正規品を扱っているので,2万4000円+税で次回以降の入荷分を予約できる。大学の研究室はもちろんのこと,個人レベルの電子工作用途にも応用できそうである。


 これまで,ここまで高性能なGPUパワーを使ってさまざまな周辺機器と連動させられる安価なワンボードコンピュータはほとんどなかった。少なくとも筆者の知る限りは皆無だったように思う。Microsoftの「Kinect」が,その性能でアマチュア電子工作シーンにモーションセンシングブームを広めたように,Jetson TK1も今後,流通量が増えるにつれ,広がりを見せていくかもしれない。

NVIDIAのJetson TK1製品情報ページ

  • 関連タイトル:

    Tegra K1

  • 関連タイトル:

    CUDA

  • この記事のURL:
4Gamer.net最新情報
プラットフォーム別新着記事
総合新着記事
企画記事
スペシャルコンテンツ
注目記事ランキング
集計:12月22日〜12月23日