GPUサーバー到来
iPXの堀田です。
最近、弊社ではディープラーニングに力を入れており、
ディープラーニング関連の案件が増えてきています。
ディープラーニングというと囲碁で世界的な棋士に勝利したり、画像から自動で人物を抜き出したりといったような何でもできるというようなイメージがあるかもしれませんが、実際に取り組んでみるとそこまで万能でもなかったり、色々と試行錯誤が必要だったりとなかなか苦労しています…
さて、弊社ではディープラーニングの学習を効率よく行うため、学習用GPUサーバーを自社導入しました。
某社で取り扱っているGeForce GTX 1080 Tiを4基搭載したブレードサーバーです。
今回の記事のテーマはこのGPUサーバーのセットアップを行ったときのことについて書こうと思います。
構成
- OS: Ubuntu 16.04
- CUDAを使う(そうでないと1080Ti4基の意味が無い)
- ディープラーニングフレームワーク: Caffe, Tensorflow, Chainner, Torch
- ディープラーニング環境はNVDocker上に構築
- フレームワークはDIGITSに乗せたい
バージョンですが、DIGITSがTensorflow 1.2.1にしか対応していない→必然的にCUDA 8.0 & cuDNN5固定ということに。
Tensorflowってバージョンごとに対応しているCUDAとcuDNNのバージョンが固定なんですね…
(Tensorflow 1.6 & CUDA 9.0 & cuDNN7で一度試してみましたが、Modelの作成でどうしてもエラーになってしまいました)
手順
- apt update & apt upgradeの実行
- NVIDIAドライバーを最新版に更新
- CUDAのインストール
- Dockerのインストール
- ログインユーザーをDockerグループに追加
- NVDockerのインストール
- DIGITSコンテナの作成
細かい手順は検索して出てくるそのままなので省きます。
7のコンテナ作成のコマンドだけ少し変えてあるので備忘録として掲載しておきます。
docker run --runtime=nvidia --name digits5 -p 5005:5000 -p 6006:6006 -v /home/ipx/data:/data -v /home/ipx/jobs:/jobs nvidia/digits:5.0
結果
(*´▽`*)
日刊工業新聞社にて、MBDセミナーを開催しました
昔作ったプログラムを見て
お久しぶりです、今回のブログ担当のシロハです。
年末に実家に帰った際にPCのデータを見ていて、
昔作った七ならべのプログラムを見つけたので、
それを見ながら考えたことについて書いていこうと思います。
作ったきっかけとか
このプログラム自体はまだ大学生の時に作成したもので、
VisualStudio+DXライブラリを用いて、C言語で作成しています。
作ったきっかけは、大学のゼミがプログラム関連の所で、C++について触る機会があり
プログラムをそれぞれ作ることになりました。
その時に作ったのが七ならべのプログラムです。
そのプログラムのスクリーンショットが下の画像です
その時は自分がルールを知っている何かを作ろうと考えて、
トランプなんかわかりやすいのではないか?みたいなノリで作り始めました。
処理とかフローとか
七ならべはそれぞれの手番や中間処理がありますが、それぞれの処理をブロックとして考えて作っています。
プログラムのフローは、
1:(プレイヤーの手番)トランプを選択する⇒2へ or 手番をパスする⇒3へ
2:(中間処理)選択したトランプが場に出す条件を満たしている: yes⇒3へ, no⇒1へ
3:(相手の手番)場に出せるトランプを探索する ⇒ 4へ
4:(中間処理)場に出せるトランプを見つけたら場に出す。なければパスする ⇒ 1へ
こんな雰囲気フローでプログラムを作ってます。
といっても、フローを紙に書き起こしてすらいませんが。
大学で、しかも半分趣味で作ったようなプログラムで、ちゃんとした開発でもありませんでしたので。
ただ、社会に出てからはそんな適当だとだめですね。
ちゃんと仕様決めて、フロー起こして、ってやらないと・・できてるかどうかは別として
ただ、七ならべのルールや処理が分かっている以上
'何を作ればよいか' が分かっているから適当でも作れたのだと思います。
作り方に関して
コードは上のそれぞれのフローをブロックごとに記述し、それぞれを独立させています。
その結果どうなるかといえば、一つ一つのブロックごとにデバッグが可能になります。
バグが出た時にバグを取り除くことは、プログラムが大規模になるほど難しいと思います。
ですが、それぞれをブロック化して作っていけば、
それぞれのブロックごとにデバッグや動作確認できるようになります。
一番良いのは、それぞれのブロックを作る⇒動作確認⇒問題なければ次のブロックの作成⇒・・・
といった流れですが。
こういった作り方は今でも必要だと思ってます。
ただ、作るものの規模が大きくなると検証するブロックの数が多く、
それぞれの検証にも時間がかかってしまいます。
その結果、動作確認がおろそかになり・・・
そして組み合わせた結果、想定通りに動かなかったり、
バグがあったりするといわゆる手戻りが発生します。
最近業務で同じようなことが起きたので、やはり一つ一つ動作確認するのは大事だと改めて感じます。
そういえば、この時に初めて構造体に手を出しました。
それぞれのトランプの数字・絵柄(対応する画像)・トランプを出せる条件・
トランプを表示する場所(画像表示するときのX・Y座標)
などトランプの持っているそれぞれの情報、
あるいはプログラムの都合で持たせたい情報を構造体で持たせる形にしています。
トランプの情報をどうやって管理しよう、と考えて調べていたら '構造体' が出てきて
これ使えるかも、と思ったのが懐かしい
プログラム以外のこと
トランプの画像はネットから52枚組のトランプの画像を探してきて、
それをまたフリーのGimpという画像編集ソフトを使って1枚1枚切り分けてから使用してます。
七ならべのプログラムを作る少し前に別件でGimpを触ったことがあったので、迷うことなく選択。
有償の画像編集ソフトがどんな感じなのかはよく知りませんが、よく知らない人からしたら
Gimpは便利な画像編集ソフト、って感じです。
終わりに
今思えば、背景が真っ黒なのはさみしいし、手札の順番も整理していない
(上のスクショでも絵柄、数字の順番がばらばら)。
当時そこまでやろうと思ってなかったとはいえ、これはひどい・・
ただ、自分のなかで作ろうとしているもののイメージを固めて、
それをプログラムという形で書き起こすのは楽しいというのは覚えてます。
あと、本文中で触れていませんでしたが、筆者は大学は数学科でした。
そのため構造体も学んだようなそうでないような・・だったり、
クラスも学んでいない(はず)な状態で作ってます。
そんな感じで筆者の少し昔を思い出しつつ、自分の作ったものの良いところと悪いところを見直そうという回でした。
2018年もiPXをよろしくお願いします
こんにちは、iPXの須山です。
新年あけましておめでとうございます
2018年になりましたね。本年もiPXをよろしくお願いします。
なお、2018年のiPXは 1月8日より平常通り営業いたします。
皆さんはどのような 新年を迎えたのでしょうか?
(ちなみに私は 実家に帰省し、地元で新年を迎えました。)
Automotive World
昨年2017年 iPXとしましては、本社事務所の移転等があった年でした。2018年もiPXでは いろいろな事が予定されていますが
弊社として 年明けまず大きなイベントとしましては、
東京ビッグサイトにて 今月17日より行われるAutomotive Worldへの
出展がございます。
社内では、鋭意出展準備中です。
18日には 東-Fセミナー会場にて、セミナーも開催予定です。
(内容は ADASシステム開発におけるDeepLearning活用事例を
弊社の開発事例を交えて紹介予定です)
是非いらしてください。
2018年もiPXをよろしくお願いします。