あゝお腹いっぱい、次なに食べよ

iPad proで機械学習したりAWSしたり

iPadでpythonとかディープラーニングもすげー簡単にできちゃうSagemakerがヤバすぎるのでみんな使って!

お疲れ様です、sysopjpです

みんなSagemaker使ってます?

これやばい、ほんとやばい、何がヤバイって もう開発にmac とかいらない当たりがヤバイ

iPadが真のシンクライアントとして目覚める感じのヤバさがすごい

と、煽り気味に書いてみましたが、pythonとして 簡単に環境構築して開発できるあたりは Cloud9より簡単なのでまじsysopjp的にはおススメです

とりあえず今回は Sagemaker でインスタンス立てて
keras の pre-model 使って 好きな画像を
判定してみましょう

Sagemaker 使ってみよう

どんなボンクラでも どんなpcでも
ブラウザさえ使えれば python で開発したり、趣味のプログラムを組めます
今 python は求人多いですしね、学ぶにはオススメですよね!! そう、今回は実は機械学習関係ないです
題名にもありましたね、iPad + Sagemaker のお話です
iPad で ディープラーニングも

はい というわけで AWS ログインして Sagemaker をポチッとしましょう

あ、ちなみに無料期間は インスタンス稼働 250時間くらいです 毎日4時間遊ぶとしても 二ヶ月は無料で遊べますよ。やったー!

インスタンス作成画面

IAMロールだけはじめに作らないといけないので IAMロール作れるユーザーで入りましょう。

S3 へのアクセスどうするの?みたいな事言われるので 気になる人は特定のs3に、どうでもいい人は任意のs3にでもしておきましょう

面倒な人は、ここで作成されるIAMロールに S3 フルアクセスでも付与しましょう

画面右下の ノートブックインスタンスの作成をクリック

ステータス pending 進行するまでお待ちください だいたい5分くらいかかります

TensorFlow の 提供してるアーキテクト

五分待ってるあいだに小話しますね

これは tensorflow の提供してるアーキテクト図ですが

今から Sagemaker で やるのは 丸ついてる

pre-made estimator のところです

そもそも Sagemaker ってなんやねん?

ってところからいきますけど

自分が一ヶ月ほど触った結論として、以下の感じでした

1、機械学習へのとっかかり

Sagemaker には
組み込みアルゴリズムってものがありまして 例えば ラーメン二郎判定とか、アイマスのキャラ判定とか ネットによくありますよね、あれをpythonコード一行も書かないで
実現できるようになっています。
具体的には3ステップ

一, s3に学習データ(画像)を保存
二, s3に教師データ(画像のpath と その画像がなんの画像かを書いた テキストデータ) を保存
三, Sagemaker 組み込みアルゴリズムで実行

以上完了です。

会社でガハハ系の上司に
「最近でぃーぷらーにんぐ が流行りなんだってね! やってみてよ! 」
みたいな事言われて困った場合でもこの組込アルゴリズムだけで
3回ぐらいは会議でどうにかできます(実話

先ほどの図でいくと

pre-made estimator

のさらに上の部分になります、むっちゃ簡単にできます。

2、AWS engineerと機械学習 engineerは別のスキルだから分業しよう

機械学習engineerにAWSは難しすぎるけど、AWS engineerには機械学習が難しすぎます
そう思いませんかね? いや僕はそう思います
だって機械学習のネットワークを修正して精度をあげれる人と
そのモデルをトラブルなく運用できる人は別スキルでしょ? 今だってアプリ engineerとインフラ engineerは別でしょ?
Sagemaker は アプリ engineerとインフラ engineerと機械学習 engineerを結びつける
そんなキューピットなのです!!!

いや、何言ってんのかわからない?

アプリ engineer的な言い方をすると
Sagemakerのインターフェースに適合させれば
モデル作る人はネットワークにだけ集中して
アプリ engineerは インターフェースにだけ集中できるのです
そう Sagemaker を使うと機械学習が分業できるようになるんですね
素晴らしくないですか?

え?もっとわからない?
えー五分たっちゃうから 最後まで読んでからあとで質問にきて!!!

3, 機械学習とかとりあえず置いといて Python実行環境として使う

conda入ってるJupyter がボタン数回で作れるので
とりあえずなんも考えずに開発環境として使えます
今回は この3を実演して とりま次回に 1の分類器実際に作成してもらって
その次 2 の学習 engineerと協業を実際にしてみますね

さて、そろそろ終わったかな? 見てみてください

Sagemaker インスタンス初号機 起動!

InService になりましたね

さぁここの オープンを クリック!!しましょう 当然僕は iPad からやります
気がついてるかもしれませんが、ここまでも ここから先も全部iPad でやってるんですよ?

Jupyter notebook

はい、見慣れた人には見慣れた画面がでましたね

この時点で

こんだけの環境があります。

どうよ?ボタン今何回押しただけよ? それでこれやで? いやわかるよ、わかる
俺だって職場では Mac に Docker いれて Juypter してるもん
それでもできるよ、もちろんできる でもね、ほら考えてみ、これから新規で来る人に
Docker ファイル渡して起動させるのと こっちと どっちのほうが早かった? ねえどっちのほうが早かった?
そして Mac とか買うより どっちのほうが*やすかった? *

実は、自分、物欲が爆発して、 新しくMacbook 買おうと思ったら30万とか普通にして
たっけーなーってなってたんですよね
2018MBPももうすぐ出そうだし今買わないほうがいいなーとか
そうだ 安く買うなら 整備済み!ってそっち探したら日本では英字キーボード整備済みにないし
もう 米アップルから整備済みで輸入するか?って本気で考えてました

でもでも、 これで開発環境としては完全に事足りてるってことに
そう、気がついたんですね。

いやー、ほんと、iPad から簡単に作れて簡単に開発できるって ほんと素晴らしい!

実際に ディープラーニングモデルを一個使ってみる

https://keras.io/ja/

この Keras は日本語ドキュメントが豊富なので 読めばできます
とりあえず、premade estimatorをやるよーって先ほど宣言したので
やってみましょうね

画面右上の New から Conda tensorflow p36 を選択します

ちなみに anaconda と tensorflow が入っている python3.6 環境の意味です

最初のセルに これをいれて Shift+return してください。
コピペするより、手で入れるほうがおススメ
15年以上 engineerしてきた僕からのお勧め
ほんと手で打たないと体が覚えないから
目で見て手で入れたほうがいいよ

from keras.applications.resnet50 import ResNet50
from keras.preprocessing import image
from keras.applications.resnet50 import preprocess_input, decode_predictions
import numpy as np

model = ResNet50(weights='imagenet')

判定したい画像が必要なので ラーメン二郎でも犬でも猫でも神社仏閣でもなんでもいいので グーグルからでもURLをとってきてください

とりあえず 猫でもやりますか、判定してみたい画像のURLをwget します 自分はwikipedia からひっぱってみました

!wget https://upload.wikimedia.org/wikipedia/commons/3/33/Hannibal_Poenaru_-_Nasty_cat_!_(by-sa).jpg 

はい、Jupyter では 頭に ! いれると、Linuxコマンドが実行できます 実行は ふつうに Shift+return ですね

これで ローカルにコピーしてきたら 以下のソースを また書いて見ましょう

img_path='Hannibal_Poenaru_-_Nasty_cat_!_(by-sa).jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

preds = model.predict(x)
print(preds)

print('Predicted:', decode_predictions(preds, top=3)[0])

はい、実行したら こうなりましたね

この画像は一位 クーガー? あー 猫科の肉食獣だと思われたみたいですね たしかに牙が怖いw
著作権がー みたいな話になりそうなので ここには張っていませんが
グーグルで猫画像を検索して wget して色々やった限りでは
けっこーあたりますよ

さて、どうでしょう? ここまで ごちゃごちゃ話しながら実は記事自体は五千文字程度ですね プログラムに至っては何行? 環境構築にいたっては何ステップで終わった?

これで、ディープラーニングが、できちゃった え?あっさり? はいあっさい、終わりました

みんな狐につままれたような顔していますが、えー今日はこれで終わりです
そんな拍子抜けした顔されても自分も困ります。。。
実行だけならこれくらい簡単にできるからSagemakerやってねって記事なんだよ。。。

大丈夫、地獄をみたい人にはちゃんと ネットワーク図をプログラムさせてやるから!
機械学習なんて8割精度検証と事前作業だからそっちで地獄を見せてやるから安心してくれ!!

え?こんなの実務で使えるの?
使えますよ、アンサンブル学習にはむっちゃ使えます
それでは以上!!! 地獄の一丁目一番地 ステップワン! 終わり! よろしくお願いいたします!!!

iPad pro で Skitch 使えるようになってた

お疲れ様です、sysopjp です!!!

初代iPad pro9.7を買った頃は Skitch 使おうとすると画面がバグってて あー、もうサポートおわったもんなー って思っていたんですが

ver3.4.1 が出て いつのまにか使えるようになっていました!!

やったー!これでスクリーンショットにも モザイク入れ放題ですね!

—— 追記

と思ったら、やっぱり‘横画面にすると画面バグってて 使えませんでした。

逆に縦画面なら使えることを今回しったので うーん? ほんとこれくらい使いやすいアプリがなんでないのだろう。

vscode + jupyter がすんげー便利

お疲れ様です、sysopjpです。

VS Codeのこのエクステンションが むっちゃ便利だったので共有します。

python使っている人はとりあえず、何も考えずに入れてください。

ソースを開いて 実行したい行を選択して CTRL + ALT + Enter

初回は notebookが動いていないので、 Start a new Notebook を選びます 起動までしばらくお待ちください。

はい出たドン。

これでSpyderに勝つる!!!

Spyderみたく CTRL+enter にしたい場合は

Code > 基本設定 >キーボードショートカット

keybindings.json を編集

{ "key": "ctrl+enter", "command": "jupyter.runSelectionLine", "when": "editorTextFocus" }

を追加でOKです。

以上よろしくお願いいたします。

お名前メール 独自ドメインメール設定 on iPad pro

お疲れ様です、sysopjpです

さて、実はあこぎな商売をしているお名前.com で ドメインをとったのは メール転送ではない 送信も可能な独自ドメインメールが、廉価で使えるので今回はここでとりました

そう、お名前メールですね。

一応月 100円以下で使えるようになるってことになっています。

でも、これ、翌月以降の金額がわからなくて 散々調べたんですが、やっぱりわからないので 一度使ってみてから考えるかーということにしました。

早速設定にいきます

ドメインの、連携サービスから

お名前メールを選んで

まあ登録はすぐですね

これ、設定が終わるまでが長くて

ご利用サービス確認 > お名前メール

アニメ1、2本くらいかかります。

終わったらメールくるので ガルパンみながらのんびり待ちましょう

さて完了メールが届いたら

サーバー設定を確認します

サーバー設定を確認する画面はサーバーnaviにあります

なんで分かれてるのか知らないんですが、 お名前.com には ドメインnavi と サーバーnavi がありまして

ドメインnavi の 右上にある ここをクリックしてサーバーnavi へ

さらに左のメニューから

ご利用サービスの確認 > コントロールパネル へ進みます。

次に コントロールパネルから サーバー情報を 開くと

smtp[番号].gmoserver.jp pop[番号].gmoserver.jp

という、サーバー情報が見れます。

このsmtp だの pop だのを mx になおした

mx[番号].gmoserver.jp

これを、ドメインの mxレコードに登録したらおkです

というわけで 続けて、ドメインnavi の DNS設定へつなぎます が、遷移が深くて貼るの面倒だから URLつけておきます

はい、こちら

https://www.onamae.com/domain/navi/dns_controll/input

設定値は

ホスト名: なし

TYPE : MX

TTL : 3600

VALUE : mx[番号].gmoserver.jp

優先 : 10

状態 : 有効

ホスト名、TTL と優先は任意ですが、変える理由のある人は変えてください。

なんだかわからない人は上記のまま設定してください。

さて、設定がおわったら当然メアド作らないといけません

「サーバーnavi」 の方に繋いで

メールアカウント作成 を クリック

新規作成 から

好きなメアド入れます

海外からのアクセスは、ご気分で

自分は海外に出る予定がまったくもって無いので 無効にしましたが

昨今の皆様方は、海外旅行中に何かあったときとか 使いたいこともあるんじゃないでしょうか?

ログインしてここ直せばいいだけですが、 多分旅行行く前に有効にするみたいなのは忘れるし そもそも、ここで設定するものだって事も忘れてると思いますから 今、自分の人生設計を振り返って設定してください。

できた!

以上、宜しくお願い致します。

新社会人むけ、本を10冊買うと一冊タダ

お疲れ様です、ししなみです

 

新社会人の皆様あてに記事書くのが流行りみたいなので

自分からも新社会人に宛てて

掲題のおすすめ話書きます


f:id:sysop:20180406231555j:image

はい、これ

http://www.goldpoint.co.jp/

 

ヨドバシ.comで本買うときヨドバシのクレカで決済すると

ポイントが10%付きます

 

つまり、10冊買うと一冊無料で買えるってことです。

日本には再販制度あるので、このキャンペーンも何時までつづくかわかりませんが

今のところ、三年立っても終わる様子ないので

しばらくは平気じゃないですかね!

 

年会費無料なので、近くにヨドバシない人でも

ヨドバシ.comで書籍買うために入っておいて損はないです。

ヨドバシ使ったことない人はヨドバシを家電屋だと思ってますが

書籍も充実しているんですわ

https://www.yodobashi.com/category/81001/81741/?sorttyp=COINCIDENCE_RANKING&word=python

 

 

ところで

新社会人向けオススメ書籍!

 

みたいな記事、一杯みましたね?

買いました?

いえいえ、すぐ買わなくてもいいのです

どうせGW前にもまた同じような記事があがってきますから

 

新社会人は覚えることがたくさんあって、今買っても

積読になりそうですしね、わかります。

 

ちなみに積読になりそうな時は15分だけでいいから 

時間を確保して

目次見て、一番興味を惹かれるとこと、一番興味を惹かれないとこの二つだけ読みましょう

 

その2つだけで、最近何か本読んだ? みたいな会話に返事ができます

 

~~の章が一番わくわくしたんですけど~~の章で寝ちゃいました

 

みたいに応答しておけば、劣等感をそんなに持たず

気分晴れやかに会話を終わらせる事ができますよ

 

以上、今後ともよろしくお願いします。

### しかし、はてなに今更新社会人なんていないんじゃ?と最後まで書いて気がつく

 

 

既存の Lambdaを apex に移行

お疲れ様です、ししなみです 既存の なーんにもデプロイフローが無いλを apexでデプロイするプロジェクトについて 最低限の手順を共有します。

普通に apex lambda で 調べると、 apex init から始まりますが これやるとIAMロール作られちゃったり 後が面倒なので、こっちでお願いします。

apex をインストール

$ curl https://raw.githubusercontent.com/apex/apex/master/install.sh | sh

プロジェクトフォルダ作ります

GITは作り終わってるはずなので git から 取得してください。

git clone ssh://hurryup_github_ni_shitai.backlog.jp/git/hoge.git

必須ファイル 作成

ディレクトリ直下に functions フォルダと project.json つくってください

$ mkdir hoge/functions

$ echo '{"name":"hoge", "handler":"lambda_function.lambda_handler"}' > hoge/project.json

project.json の name について

lambdaの関数名が name + functionname になるので、既存に上書きしたい場合はなんかうまいこと考えてください。

lambda_function.py とか移動

lambda関数名に合わせてディレクトリ作って functions の下に 移動してください 上にも書きましたが、ちゃんと空気読んで プロジェクト名は抜いてください

$ cd hoge
$ mv src functions/put_s3

こんな構造になってるはず

 ~/project/hoge $  tree   
├── functions
│   └── put_s3
│       ├── lambad_function.py
│       └── vendor (内容略)
└── project.json

function.json 作成

runtime と memory と timeout 指定するファイル作ります

~/project/hoge $ cat functions/put_s3/funtison.json
{
  "runtime": "python3.6",
  "memory": 128,
  "timeout": 10
}

deploy します

$ apex deploy put_s3

とりあえずこれで 初期設定完了してるので 確認してください。

hoge_put_s3

って名前のλ関数ができているはずです。

続いて、STGとプロダクションレベルの設定いきます

λ関数ごと分離する場合

project.stg.json と project.prod.json 作成します

$ cat project.stg.json
{
  "name": "STG-hoge"
}

$ cat project.prod.json
{
  "name": "PROD-hoge"
}

# stgリリース
$ apex deploy put_s3 --env stg

# prod リリース
$ apex deploy put_s3 --env prod

alias で区別させる場合

$ apex deploy put_s3 --alias stg
$ apex deploy put_s3 --alias prod

alias で区別して なおかつ メモリ量とか変更する場合

funtison.stg.json を作成

$ cat functions/put_s3/funtison.stg.json
{
  "runtime": "python3.6",
  "memory": 1024,
  "timeout": 30
}

$ apex deploy put_s3 --alias stg --env stg

環境変数の指定

project.json でも function.json でも好きな方でいいので

  "environment": {
    "TABLE": "hoge-table"
  }

を追加してください

例えば

$ cat functions/put_s3/funtison.stg.json
{
  "runtime": "python3.6",
  "memory": 1024,
  "timeout": 30,
  "environment": {
    "TABLE": "stg-hoge-table"
  }
}

$ cat functions/put_s3/funtison.prod.json
{
  "runtime": "python3.6",
  "memory": 1024,
  "timeout": 30,
  "environment": {
    "TABLE": "hoge-table"
  }
}

ちなみに、とっとこSAM太郎は環境変数を増減させた時 よくわからないエラー吐くので、時間ないし別の機会で。

以上、よろしくお願いします。

iPad pro ローカル内だけでPython開発環境を構築 iPad単体でLambdaUPもできます

お疲れ様です、ししなみです。

掲題の件について、そんなんEC2でもGCEでもええやん と思った人がいるかと思いますが ローカルで shが動く事に意味があります。

そう、通信しないでいいってことです。

いや gitもlambdaUPも通信必要ですが、 それは通信が通る環境、つまりwifiとかある環境で叩けばいい事で

え?セルラーモデル買えばいいって? ししなみも iPad Pro のセルラーモデルですが それでも通信が途絶する環境ってのはあるんですよ。。。

と に か く

今回は iPad pro ローカルにPythonのすんばらしい開発環境を構築します。

必要資材

Pythonista3 を起動

CTRL+J でREPL起動

Pythonista tools インストール

import requests as r; o=open('ptinstaller.py','w'); o.write(r.get('http://j.mp/pt-i').text); o.close()

をいれてEnter

pinstaller.py 起動

pinstaller.py を選択し、Command+R で起動

pinstaller から各ツールをインストール

ここから GitやLambdaUPやS3sync SCP SMBClient とか YoutubeDownloader などなどなどなど え?どゆこと?これ制限きついはずのiOS上から 自分でPythonアプリつくれちゃうの? 的なものを 入れまくります。

とりあえず PythonistaSh を使って見たいので Github Tools > ALL Pypi Module > pypista と を入れます

StaSh インストール

Command + J で REPLを起動

import requests as r; exec(r.get('http://bit.ly/get-stash').text) を打ち込み StaShをインストールします

pip を確認してみる

再起動を促されるので 再起動をしてから

launch_stash.py を開いて 実行(Command+R)すると

あら不思議なshが起動しましたよ

あとは 普段通り pip で好き勝手入れればおkです

やったね! Q!E!D!