読者です 読者をやめる 読者になる 読者になる

かれ4

かれこれ4個目のブログ

Mac上でCNTK改めCognitive ToolKitを使うならDockerが1番楽ちんそう

結論

Mac上でCNTK改めCognitive Toolkitを使おうとコンパイルを試みたけれど、ネイティブでは無理だった。 無理じゃないかもしれないけれど、労力ががが 結局Dockerでやるのが楽ちん。

なぜ??

github.com

ここにも有るようにACMLがLinuxWindowsにしか提供されていないからだと言う。 他のオープンソースのライブラリで代用しないか?という質問に対しても しかも当面はWindowsLinux以外はサポートしないとはっきりと書かれている。

ACMLとは?

AMD Core Math Libraryの事。 developer.amd.com

  • Level 1, 2 and 3 BLAS
  • LAPACK の全ルーチン
  • FFT(単精度、倍精度)
  • 乱数生成(単精度、倍精度) が高速に扱えるライブラリ。

ただ、現在サイトを見てみると終了のお知らせがあり、これからはオープンソースでやっていくから gpuopen.comを見てねと オープンソースになったので、Mac用にビルドするとか出来るようになるでしょう

とりあえず、ACMLはここまでにしてMacでなんとかCNTK

もうMacでもなんでもない。Dockerで

DockerでCNTKを使う方法は公式のWikiにも書いてある。

CNTK Docker Containers · Microsoft/CNTK Wiki · GitHub

ここに書かれている通りに

cd ${REPO_ROOT}/CNTK/Tools/docker
docker build -t cntk CNTK-CPUOnly-Image

こんな感じでbuildすればとりあえず、MacでもなんでもCognitive ToolKitは試せる ただ、buildにMacbook Air 2014 で大体8時間位かかるので、 ビルド中は美術館なんかに行くのが良いと思う。

ちなみに

$ docker search cntk
NAME                      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
torumakabe/cntk-cpu       Image built by MS CNTK Dcokerfile (CPU)         1
microsoft/cntk            CNTK                                            1                    [OK]
attz/cntk                                                                 0
xmedicus/cntk             CNTK                                            0
smizy/cntk                Based on torumakabe/cntk-cpu, MNIST data p...   0
xiw9/cntk                 Another CNTK docker image                       0
qianjun22/cntk-gpu        Docker Image built from the official MS CN...   0
alfpark/cntk              Microsoft Cognitive Toolkit (CNTK) with 1-...   0
toyotaka/cntk                                                             0
tottokug/cntk-cpuonly                                                     0
incognition/cntk-devel                                                    0
nefrock/docker-cntk-cpu                                                   0
nefrock/docker-cntk-gpu                                                   0
incognition/cntkcuda8                                                     0
ericebert/cntk_gpu                                                        0

と、野良のcntkのDocker Imageが出て来る。 その中に一つ異彩を放つ一行がこちら microsoft/cntk なんか公式っぽいTagが付いているImageがある、 しかしdocker hubに行ってみると、

https://hub.docker.com/r/microsoft/cntk/tags/

キチンと公式っぽいものが用意されていた。 RepoInfoのショボさはこの際は気にしない。

$ docker run  -it --rm microsoft/cntk:1.7.2-cpu-only /bin/bash
root@de3948185514:/cntk# cntk
-------------------------------------------------------------------
Build info:

        Built time: Oct  1 2016 21:16:06
        Last modified date: Sat Oct  1 21:14:58 2016
        Build type: release
        Build target: CPU-only
        With 1bit-SGD: no
        Math lib: mkl
        Build Branch: HEAD
        Build SHA1: d1ad5fcc9b71c9b6122623a2a0c3d126a64cbe94
        Built by philly on 9b019bb2e014
        Build Path: /home/philly/jenkins/workspace/CNTK-Build-Linux
-------------------------------------------------------------------
No command-line argument given.
-------------------------------------------------------------------
Usage: cntk configFile=yourConfigFile
For detailed information please consult the CNTK book
"An Introduction to Computational Networks and the Computational Network Toolkit"
-------------------------------------------------------------------

とりあえず、これでよいか。

Mac上でcntkを試す程度であれば、これが1番楽ちんそうだなと思いました。

Amazon Linuxのコンテナイメージを自分のdocker hubのリポジトリにコピーする

New Amazon Linux Container Image for Cloud and On-Premises Workloads | AWS Blog

こんなリリースがあったけど、ecrとイチャイチャしたり、色々めんどくさいから、手元で使いやすいように

規約的に大丈夫かわからないので自己責任で

#!/bin/bash

if [ $# -ne 1 ]
then
  echo "USAGE: $0 {MY_REPOSITORY}"
  echo " "
  exit;
fi
REPOSITORY=$1

LOGIN_CMD=$(aws ecr get-login   --registry-ids 137112412989)
eval "$LOGIN_CMD"

for image in $(aws ecr list-images --registry-id 137112412989 --repository-name amazonlinux |jq -r .imageIds[].imageTag);
do
  docker pull 137112412989.dkr.ecr.us-west-2.amazonaws.com/amazonlinux:${image}
  echo "IMAGE reTAG========================================================="
  docker images |grep "amazonaws.com/amazonlinux" |grep "${image}" | perl -anle 'print "$F[2]"' | xargs -I{} docker tag {} ${REPOSITORY}/amazonlinux:${image}
  echo "IMAGE push========================================================="
  docker push ${REPOSITORY}/amazonlinux:${image}
done

SORACOM Airを使わずに、SORACOMを楽しむ方法

はじめに

SORACOMリリース1周年記念リレーブログ 11月1日分です。 blog.soracom.jp

SORACOMももう1周年という事で、色々とサービスが増えて来ました。 まずは各サービスをGoogle Trendで見てみます。

↑読み込み遅いけどGoogle Trendsのグラフ出ます。

↑読み込み遅いけどGoogle Trendsのグラフ出ます。

SORACOM Airが 2014/7/6 - 12の間に検索されていたりするのは、 創業者二人が飲みながら名前を考えているときに、 検索していたのかなと想像すると楽しいですね。

AirとBeamの検索量にたいして、他のサービスはGateがかろうじて 検索されている位の状況です。

ということで、今回はCanal周りを中心に遊んでみようと思います。

VPGで遊ぶ

まずはVPGで遊んでみたいと思います。 VPGを作成するところから。

VPGの作成

$ soracom vpg create --device-subnet-cidr-range=10.0.0.0/9  --primary-service-name=canal
{
    "createdTime": 1477998721142,
    "deviceSubnetCidrRange": "10.128.0.0/9",
    "lastModifiedTime": 1477998722107,
    "operatorId": "OP0012950956",
    "primaryServiceName": "Canal",
    "status": "creating",
    "tags": {},
    "type": 12,
    "ueSubnetCidrRange": "10.128.0.0/9",
    "useInternetGateway": true,
    "virtualInterfaces": null,
    "vpcPeeringConnections": null,
    "vpgId": "********-****-****-****-************"
}

コマンドラインでサクと作ります。
### statusがrunnningになればvpg作成完了
$ soracom  vpg get --vpg-id=acf68be6-83f7-44c3-9fd5-bd741a434176 |jq -r .status
running

特に難しいこともなく、作成完了です。

$ soracom vpg list-ip-address-map-entries --vpg-id=********-****-****-****-************
[
    {
        "hostId": "100.64.148.132",
        "ipAddress": "10.64.148.132",
        "key": "100.64.148.132",
        "type": "gatePeer"
    },
    {
        "hostId": "100.64.148.4",
        "ipAddress": "10.64.148.4",
        "key": "100.64.148.4",
        "type": "gatePeer"
    }
]

f:id:tottokug:20161102003139p:plain

 なにやら、アドレスが2個作成されています。  推測ですが、VPGというのはVPCと(AZにまたがって)EC2が2台という構成で作られているのでは無いかと推測できます。  今作成したものであれば、  100.64.128.0/17と100.64.0.0/17というサブネットがあるのではないかと思います。

 このVPCがアカウント毎に違うVPCなのか、同じVPCなのかは今回は検証していませんが、おそらく別れていることでしょう。

AWS側でVPCを作って遊んでみる

こちらもさくと作ります。

$ aws ec2 create-vpc --cidr-block 172.19.0.0/16
{
    "Vpc": {
        "VpcId": "vpc-467*****",[f:id:tottokug:20161102003146p:plain]
        "InstanceTenancy": "default",
        "State": "pending",
        "DhcpOptionsId": "dopt-ada4b3cf",
        "CidrBlock": "172.19.0.0/16",
        "IsDefault": false
    }
}

f:id:tottokug:20161102003141p:plain

VPGとAWS VPCをつなぐ

VPCとつなぐのはコマンド一つのお手軽さです。

$ soracom vpg create-vpc-peering-connection \
--destination-cidr-block=172.19.0.0/16 \
--peer-owner-id=01234567890123 \
--peer-vpc-id=vpc-********** \
--vpg-id=********-****-****-****-************

これで、SORACOM側のAWSアカウントから、指定したVPCに対してPeeringのRequestが届きます。

それをAWS側でAcceptすることで、Peeringが完成しました。 f:id:tottokug:20161102003146p:plain

VPGとSORACOMのVPCの関係について後日追記予定の内容があります。

Subnetの作成とRouteTableの設定とEC2の起動

先程Peeringを作ったVPCもそのままでは特に何もないネットワークなので、 もうちょっと遊ぶために、Subnet(172.19.8.0/24)を作成し、 RouteTableに100.64.0.0/16 への通信をpeeringに渡す設定とSecurity Groupを適切に設定する事で、 AirからEC2への疎通は出来るはずです。 今回はAirは使っていないので、確認はできていません。。。

f:id:tottokug:20161102003148p:plain

EC2からアクセス出来るのはどこまでなのか

そして、今日の本題。 EC2からSORACOMのどこまでアクセス出来るのか試してみたいと思います。

Doorがあればまた話しは変わってくるのかもしれませんが、 今回はSORACOM CanalとSORACOM GateだけでEC2がどこまでアクセス出来るのかを試していきたいと思います。 vxlanの設定までを https://dev.soracom.io/jp/start/gate/ ここを見ながら終わらせます。

$ soracom vpg register-gate-peer --outer-ip-address 172.19.8.253 --vpg-id ********-****-****-****-************
{
    "innerIpAddress": "10.18.216.109",
    "netmask": null,
    "outerIpAddress": "172.19.8.253",
    "ownedByCustomer": true
}

SORACOM Air

これは公式ドキュメント https://dev.soracom.io/jp/start/gate/#step5 にも書いてある事で出来るはずです。 今回はSORACOM Airを使わないで楽しむことが目的なので、割愛します。

SORACOM Beamに

SORACOM Beamには100.127.127.100というIPアドレスがついています。 このネットワークにアクセス出来ると良いですね。 とりあえず、単純にRouteTableに100.127.0.0/16へのルートをPeeringに向けてみます。

$ nmap 100.127.127.100

Starting Nmap 6.40 ( http://nmap.org ) at 2016-11-01 14:58 UTC
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.03 seconds

SORACOM Funnelに

Beamのときと同様にfunnel.soracom.io (100.127.65.43)にも

$ nmap  100.127.65.43

Starting Nmap 6.40 ( http://nmap.org ) at 2016-11-01 15:01 UTC
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.03 seconds

さいごに

結論、頑張ったけど、EC2からBeamにもFunnelにも到達することはできませんでした。

もし、EC2から直接BeamやFunnelにアクセス出来たならば、 MQTTのフルマネージドサービスを手に入れることができ、 SORACOMをIoTのサービスではなく、データフローのサービスとしても楽しむことが出来るはずです。

VPGはセットアップの時に 980 円/回 (税別)がかかるのと、 VPG 利用料金: 1時間あたり 50 円 (税別) VPC ピア接続利用料金: 1ピア接続・1時間あたり 10 円 (税別) [2016/11/1 現在] がかかるので遊び終わったら削除する事と、無駄にVPGを作成しないことで 突然の課金にびっくりすることはないでせう。

と、自己満足に浸ったところで、11/1分はおしまいです。

Logicool (Logitech) R800の各ボタンのキーコード

Logicool R800とは

プレゼンを日常的に行う人なら誰でも一本は持っているであろう、道具。 これがあれば、PCの前にいなくてもKeynotePowerpointのスライド送りをすることが出来るすぐれもの。

LOGICOOL プロフェッショナルプレゼンター タイマー機能・LCD搭載 R800

LOGICOOL プロフェッショナルプレゼンター タイマー機能・LCD搭載 R800

R800はキーボード

PCに接続すると配列を問うダイアログが出たりすることから、キーボードとして認識される事は有名ですが、 キーコードはあまり知られていません。 各ボタンに対応するキーコードがわかれば、ブラウザでのデモなんかにも応用することが出来るようになってきます。

R800のボタン

f:id:tottokug:20160522162102p:plain

上の写真の通り、このプレゼンターには前面に5個のボタン 写真ではわかりませんが、右側面に2個のぜんぶで7個のボタンがついています。

このうち、PCに認識されているボタンとしては以下の画像の4つになります。

f:id:tottokug:20160522162449p:plain

キーコード表

位置 ボタン コード キーボード
左上 f:id:tottokug:20160522163732p:plain 33 PageUp
右上 f:id:tottokug:20160522163740p:plain 34 PageDown
左下 f:id:tottokug:20160522163747p:plain 27/116 Esc/F5
右下 f:id:tottokug:20160522163751p:plain 190 .

f:id:tottokug:20160522163747p:plainのボタンはF5とEscがトグルになっていて、27->116->27->....と交互にキーコードを送ってきます。

Visual Stuidio Code の0.10.6が出来たようです。

Macの日本語環境でVisual Studio Codeが動かなくなって困ったけれど
0.10.6が出てたみたいです。
おそらくこの0.10.6はupdateChannel が insiderのやつかと思われます。

このバージョンだとMacの日本語環境でも問題なく動きました。

github.com


ビルド済みのバージョンは以下からダウンロード出来ます。
https://az764295.vo.msecnd.net/public/0.10.6/VSCode-darwin.zip

ここのバージョン番号を書き換えればVisual Studio Codeのサイトでダウンロード出来ないバージョンもダウンロード出来ます。(2015/12/23)