船木俊介「かつて未来とよばれたソサエティ」

スーパーソフトウエア東京オフィス代表&キッズラインCTO

61ol+h6uD1L
バリューのある仕事をするには、解の質を高める必要がある。そのために、イシュー度、つまり課題の質を問わねばならない。

何年か前に読んだ、「イシューからはじめよ(ヤフーCOO室室長 安宅和人)」という本がオフィスの本棚にあって、結構いい本だったよなと思いながら久しぶりに読んでみた。問題提起はストレートに、生産性を上げるとはどういうことか、について。まとめると冒頭の一文になる。

簡単に言えば、生産性の高い人は解決すべき課題を見極める能力が高い。仕事ができない人は、成果に関係のない無駄な努力が多い。その「見極め」に差がある、ということ。

そもそもハイレベルな仕事というのは不確実性の固まりなので、決まった手順があって、その通り行えば目的が達成されるという種類のものではない。結果を出すには幾通りものアプローチがあり、いくら真面目に取り組んでもダメな経路もあり、ムダと気づかずムダを重ねる人もいる。つまりスタンスの問題ではなく、思考力が問われる。

例えば、Googleはウェブにある目的の情報をユーザがいかに入手するべきかという解から始まった会社だ。その背景にはもちろん、当時のディレクトリ型では賄いきれないほど情報が増え、闇雲にキャッシュしたなかから特定の語句を含むページを表示する原始的検索では目的文書にたどり着くことが難しいことがあった。

この本に沿って言えば、ユーザの検索コストというイシューに対して、ドキュメントの有用性評価を行うページランクという解によってバリューを出している、ということになる。こてこてとデザインで飾り付けたり、余計な情報を付加したり、といったショボくてムダな努力はしない。

カレーを作るときに、どんなに料理が下手な人でも、とにかく水の量に気をつけていればなんとかなる。野菜の切り方など、それ以外の細かい努力をいくらやっても大して変わらないが、水の量を間違うととんでもないことになり、正しければ美味しいカレーができる。つまりは、それと同じことだ。

イシューとは、
① 2つ以上の集団の間で決着の付いてない問題
② 根本に関わる、もしくは白黒がはっきりしていない問題
今の段階で答えを出すべき問題であり、かつ答えを出せる問題(=イシュー)は、我々が問題だと思う対象全体の1%ほどに過ぎない
「これは何に答えを出すためのものなのか」というイシューを明確にしてから問題に取り組まなければ後で必ず混乱が発生し、目的意識がブレて多くのムダが発生する。


個人的には、この巻末コラムが好きだった。どんな分野でも、プロフェッショナルとなるくらいのレベルは、こういう意識で取り組むべきだと思う。これが言いきれない人は何歳であろうが、まだまだ先は長い。

「コンプリート・スタッフ・ワーク(Complete Staff Work)」これは「自分がスタッフとして受けた仕事を完遂せよ。いかなるときにも」という意味だ。この「コンプリートワーク」という言葉はプロフェッショナルとして仕事をする際には、常に激しく自分にのしかかってくる。プロフェッショナルの世界では「努力」は一切評価されない。
「人から褒められること」ではなく、「生み出した結果」そのものが自分を支え、励ましてくれる。生み出したものの結果によって確かに変化が起き、喜んでくれる人がいることがいちばんの報酬になる。


戦略コンサルタント寄りの書籍だけど、エンジニアでも、プログラミングを学んだ後に、身につけた素晴らしい技術を使ってクライアントの問題を解決する、何かを生み出して社会を変える、ここで役に立つ内容なので読んでみて欲しい。

今週は美味しいものを食べる機会が多くて、楽しい話をしてお酒を飲んでの1週間。

西麻布のCotで大胸筋の筋トレの成果を自慢したり(本当はちょっと違う)、 IMG_0919_2
恵比寿の和食で、日本酒を飲みながらアントニオ猪木のモノマネを見たり(本人はそのつもり無い)、 IMG_0955_2
ウェスティンの龍天門で、2015年「働きがいのある会社」ランキングで第2位に選ばれた企業の社長さんにすごい話を聞いたり、ウェアラブルの未来について話したり、 IMG_0970_2
と、和洋中バランスの良い健康的な食生活。

色々食べた中でも、このトリュフパイ。これほど贅沢なトリュフの食べ方があったのか、と驚くほどの芳醇な香りと、美味しさ。ただ、一番美味しかったのは、

IMG_0857_2
なんかに雲丹がのったやつ。これが美味い。水筒にこれを目一杯詰めて持ち歩きたいくらい美味かった。雲丹と書いたけど、塩漬けしたものを雲丹と書くことが多いそうで、生のものは海胆か海栗ですね。暑い夏は、海胆と冷酒で過ごしたい。

IMG_0865_2

Googleの人工知能DeepDreamは、LSDで幻覚を見てるような画像、常軌を逸した画像、の作成機というわけではなく、実は技術的に大きな進化だ。人工知能が「特徴を自ら認識」するというところがすごいところ。我々人間が脳で行っている認識するという神経細胞メカニズムを、これだけ機械が模倣できたことは今までにないと思う。人工知能が自分が知ってるものをベースにして、提示された画像はこんな風に見えるな、という感じで、融合した結果画像を生成していくわけだ。

しかもgithubでソースが公開されているので、環境構築ができれば誰でも使うことができる。さっそく画像をDeepDreamに見せてみたら、

国宝松本城は、周りになんか車のような物体が出てきて、天守もキリスト教伝来みたいな状態に。

松本城 松本城DeepDream

去年イタリアに行ったときに撮ったフィレンツェの美術館の写真は、ことごとくワンちゃんの顔に。

美術館 美術館DeepDream

安藤広重の東海道五十三次・日本橋は、人通り増えた感が。

東海道五十三次 東海道五十三次DeepDream

いくつかDeepDreamしてみたのを動画にまとめるとこういう感じ。悪夢。



DeepDreamを動かしてみる

DeepDreamを含めて、Deep Learningでは大量の計算コストが発生するので、CPUではなくGPUで計算させるのが一般的だ。さらにそのGPUも、NvidiaがCUDAというハイパフォーマンス環境を提供しているので、Nvidia製の必要がある。また、Deep Learningの画像処理といえばCaffeというフレームワークがスタンダードになっている。

条件が色々あってハードウェアから揃えるのは面倒、そういう時に頼りになるのがAWS。AWSのAMIで提供されている環境があるのでそれを使えばすぐにDeep Learningを始められる。

参考URL:CUDA 6.5 on AWS GPU Instance Running Ubuntu 14.04Running Caffe on AWS GPU Instance via Docker。(単純に実行してみたいというだけならWeb interface for Google Deep Dreamもある。)


AWSインスタンス作成

ずっと使い続けるものでなければ、コストが安いスポットインスタンスで十分だろう。スポットインスタンスとは、AWSサーバリソースを入札形式で購入できるのでオンデマンドに比べて安く使える仕組み。ただし、需給バランスが変わって入札価格より流通価格が上回ったらすぐにターミネートされる。

インフラは再利用性も考えてPackerでスクリプトから作りたいところだけど、Packerスクリプトでspot_priceを設定するとエラーが出て進まなかったのでここではAWSマネジメントコンソールから作成する。

必要なスペックは、
・ami-2cbf3e44 for US-East または ami-c38babf3 for US-West
・Ubuntu Server 14.04 LTS (HVM) – CUDA 6.5
・インスタンスタイプはGPUを使うので、g2.2xlarge
・ストレージは20GB
この情報をもとに構築していく。

AMIが提供されているのが米国東部か米国西部なので、AWSマネジメントコンソールで米国東部(バージニア北部)にリージョン設定。EC2で「スポットインスタンスのリクエスト」をクリック。AMI選択で「ami-2cbf3e44」を検索すると、イメージがあるのでそれを選択。
dd_aws1

インスタンスタイプは「g2.2xlarge」を選択。g2.2xlargeは1,536CUDAコアを搭載してるらしい。
dd_aws2

スポットインスタンスの入札価格を設定する。今回は「$0.08/h」にしてみた。
dd_aws3

ストレージ構成は、/dev/sda1に8G以上、/dev/sdbに20G。ライブラリの展開等で必要なので、/dev/sda1は20Gくらい多めにとっておいた方がいい。
dd_aws4

しばらく待つと落札されて、通常通りインスタンスが使えるようになるので、pemキーを使ってSSHログインする。

CUDAが正しくインストールされているかの検証

$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ make
$ ./deviceQuery

を実行して、

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 1, Device0 = GRID K520
Result = PASS

と表示されればOK。


dockerインストール

CaffeがGPUで動くようにdockerを設定しておく。

$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
$ sudo sh -c "echo deb https://get.docker.com/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
$ sudo apt-get update
$ sudo apt-get install lxc-docker
$ DOCKER_NVIDIA_DEVICES="--device /dev/nvidia0:/dev/nvidia0 --device /dev/nvidiactl:/dev/nvidiactl --device /dev/nvidia-uvm:/dev/nvidia-uvm"
$ sudo docker run -v /tmp:/opt/caffe/misc -ti $DOCKER_NVIDIA_DEVICES tleyden5iwx/caffe-gpu-master /bin/bash

わずか20分くらいでDeep Learningに使えるマシンが完成。すごい時代だ。docker runした後は、Caffeがインストールされたコンテナ環境での作業になるので、/tmpをファイル転送のためにマウントしてある。


DeepDream実行

DeepDreamを実行するために必要なものは、スクリプトとターゲット画像の2つだけ。Googleが公開しているスクリプトはipython notebook形式で、解説なども含まれているためpythonスクリプトだけにしたものを使う。GPUで処理するためにcaffe.set_mode_gpu()を追加してある。

このスクリプトとtarget.jpgを/tmpにSFTPすれば、/opt/caffe/miscで使うことが出来るようになる。Googleのドキュメントに従ってモデルをダウンロード。

$ cd /opt/caffe/models/bvlc_googlenet
$ wget http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel

DeepDreamを実行する。

$ cd /opt/caffe/misc
$ python deepdream.py

GPUなので次々と処理が進んでいき、frames/にブッとんだ画像が格納される。

deepdream deepdream

↑このページのトップヘ