そんな今日この頃の技術ネタ

本家側に書くほどでもない小ネタ用

Deep Learning学習その1 ひとまずChainerを動かしてみる

 セミナーで学んだ内容を自分なりに噛み砕いてまとめて復習してみる。

  • ニューラルネットワークとは、さながら脳のシナプス結合のようにして個別に数値処理をするノードを積み重ねてた処理のモデルである -> 世の中の事象を何らかの数列操作として表現する -> 入出力は数列で表現できる必要がある
  • 個別のノードは複数の入力xから望ましいuが求まる数式f(x) = w_1 * x_11 + w_2 * x_11 + ・・・として示すことができる -> 一番最初はランダムに重みwが振られ、それぞれの入力に対する適切な値を重回帰分析により求めて調整していくことが学習である
  • 中間の層と層の間でRelu関数などの非線形変換を噛ませることで世の中の多様な事象の表現を実現できる
  • 学習は現状の重みを基にして望ましい数値との誤差を計算する順伝播と、その誤差から個々のノードを調整する逆伝播の繰り返しである


 実際の流れとして

  1. 訓練データを数列として与える
  2. 何層かとか入出力の数列の長さとかノード間の結合といったモデルを設計して定義する -> ここシステマティックにバシッと決まるわけではないのがプログラマ的には気持ち悪い
  3. 誤差からの調整方法なんかを定義する -> ここも目的によっていくつか方法がある
  4. 2と3を用いて学習を繰り返す -> ここの回数なんかも動かして誤差の収束状況なんかと見比べて調整する感じ
  5. 学習済みモデルの出来上がり、上手く出来上がれば入力を突っ込むとそれらしい出力が出るようになる


 これを僕の中ではスマートボール(跳ね返し板の無いピンボール)として連想している。

f:id:blue1st:20170919003146p:plain

  • 板のサイズだの球数だのは決まっている->モデルは人間が予め設計する必要がある
  • 特定の位置に置いた球が落ちるべき場所に転がるように釘を調整するのが学習
続きを読む

GitHubとDockerHubを連携させて自動でイメージのビルドを行ってみる

 ローカルにDocker Registry立てたりGCR使ったりはしたことあったけど本家たるDockerHubって使ったことが無かったので、思い立ってちゃんと使ってみることにした。

 DockerHubにはAUTOMATED BUILDというGitHub(もしくはbitBucket)のリポジトリにDockerfileを含んだpushすると自動でイメージをビルドしてくれる機能がある。

 実際にイメージを使う側としても、Dockerfileが公開されてて人為的な操作の入らないAutomated Buildじゃないと怖くて使う気がしないわけで、DockerHubに公開する際はどんどん活用していきたい。


 何はともあれ、最初にアカウントを作成しておく。

https://hub.docker.com/hub.docker.com

f:id:blue1st:20170918033537p:plain

f:id:blue1st:20170918032822p:plain

 (最初慌ててここでリポジトリを作成してしまったのだが、後からAutomated buildを設定する項目は見当たらなかったので多分最初からそれ用に作らないといけなそう。要注意だ。)

続きを読む

GitHubに課金してプライベートリポジトリを使えるようにしてみた

 自宅サーバにはGitLab立てて運用してたりしたけど、グローバルに非公開のリポジトリが欲しいタイミングもあるのでGitHubのDeveloperプランに課金してみることにした。

github.com

 単にリポジトリが欲しいだけならbitBucketとかGitLab.comとかいった無料の選択肢もあるのだけど、使用者的に何か作ってを公開するならやっぱりGitHubだろうなと思うし、諸々のツールの対応とかうかっりした時にサクッと非公開にできるメリットとか、あと業界振興的な意味もあって$7/月なら払っても良いかなという判断。

続きを読む

macOSで「dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib」というエラーが出るようになった

 新しく買ったMacbook Proでhomebrewでansibleをインストールしようとした所、以下のようなエラーが出てきた。

dyld: Library not loaded: /usr/local/opt/readline/lib/libreadline.6.dylib


 じゃあってんでreadlineなるものをhomebrewでインストールしようとしたところ、既にインストールされていると出る。どうやらバージョンが7に進んだことで該当のライブラリが無くなったことが問題なようだ。

 該当のパス/usr/local/opt/readline/lib/を確認すると7系は存在しそうなので、こいつのシンボリックリンクを作成。libreadlineだけじゃなくlibhistoryの方でもエラーが出るので、そちらも一緒に。

$ ln -s /usr/local/opt/readline/lib/libreadline.dylib /usr/local/opt/readline/lib/libreadline.6.dylib
$ ln -s /usr/local/opt/readline/lib/libhistory.dylib /usr/local/opt/readline/lib/libhistory.6.dylib

 ひとまずこれで諸々動きそうな雰囲気。

OS X上にPythonの学習環境を整える(anyenv、pyenv、virtualenv)

最近の機械学習の流行もあってかPython環境を整える系の記事がいっぱい出回ってて「コイツラまた環境構築してるよ・・・」なんて揶揄されてたりするけど、調べてみると色々な方法があるようで、なるほど確かに人によって状況によって最適な手段は変わってくるのだろうし初心者が躓きかねない気もする。

(前職のPerlで四苦八苦したところだけど、)LLのランタイム切り替えやパッケージ管理はちゃんと把握しないで使うとしっちゃかめっちゃかになってしまうので、自分なりのやり方を記録しておこうと思う。

続きを読む

Docker/Docker ComposeのSecretsを試す

接続情報などコンテナ内への記述が憚られる情報について外部から与える方法としてsecretsがdocker 1.13/docker-compose.yamlのformat ver3.1からサポートされた。

予めdocker secretコマンドでファイルを登録するか、もしくはdocker-compose.yaml内でファイルを指定することで、それらのファイルがコンテナ内の/run/secretesディレクトリ以下にマウントされる。

続きを読む

kubernetes学習番外編 コンテナ起動時のコマンド実行

 何かしらの設定ファイルが必要なアプリケーションをDockerイメージとして作成する場合、可搬性を考慮するならコンテナ内に予め特定の状況の設定ファイルを格納するのではなく、コンテナ起動時に環境変数から設定ファイルを生成するのが望ましかったりする。 (設定ファイルをマウントするという手もあるけど、あんまエレガントじゃない気がするんだよね。それこそK8Sだと手間だし。設定は全部環境変数で賄う形に統一してしまうのがDockerの運用としては美しいと思う。)

 そんな場合によく用いられる手段の一つがenvsubstを用いて設定ファイルを生成した後にアプリケーションの起動コマンドを実行するという方法であり、具体的には

  • CMDとしてアプリケーションの起動コマンドを設定
  • ENTRYPOINTなんかで生成コマンドを終えた後に、CMD設定値なり実行コマンドなりが引数で渡ってくるのでそれをexecで実行

なんて作りにしたりする。

blue1st-tech.hateblo.jp

 こんな形にしておくと嬉しいのが、commandを差し替えても設定ファイルそのものは生成されることであり、同じイメージで起動オプションだけを変えたコンテナを立てたりする場合に便利だったりする。

 というわけで僕はよくENTRYPOINT+CMDな構成のイメージを作るんだけど、最近K8Sの案件で意図と違う挙動をしたりすることがあったので、ちょっと検証してみた。

続きを読む