Dockerコンテナを利用してFlask + Kerasの開発環境を構築する
大学の卒業研究でKerasとFlaskを利用してWebアプリケーションを開発していたのですが、Python3.7.2にアップデートした途端に以下のエラーが出ました。
$ pip3 install tensorflow Could not find a version that satisfies the requirement tensorflow (from versions: ) No matching distribution found for tensorflow
調べた結果Python3.7以上だとtensorflowが使えないようなので、kerasとFlaskの開発環境をDockerでコンテナごと作ってしまおうと思いました。
flaskの開発環境をDockerで利用したい人はぜひ参考にしてください。自分用メモとして残しておきます。
- 開発環境
- macOS: mojave
- docker version: 18.09.1
Dockerfileを記述
とりあえず、pythonのバージョンを3.6にしておき、そのほかの必要そうなライブラリもまとめてpipしておきます。
FROM python:3.6 ARG project_dir=/app/ COPY . $project_dir RUN apt-get update RUN apt-get install -y vim RUN python -m pip install --upgrade pip RUN python -m pip install image RUN python -m pip install flask RUN python -m pip install keras RUN python -m pip install tensorflow RUN python -m pip install numpy
Dockerfileを記述し、flaskのプロジェクト配下におきます。
Flaskのpythonファイルの設定
if __name__ == '__main__': K.clear_session() load_model() model._make_predict_function() app.run(debug=True,host="0.0.0.0",port=5000)
Flaskのpythonファイルの実行関数部分を以上のように設定します。 特に最後のapp.runの引数を正しく設定してください。
またkerasを使っている人は_make_predict_function()で実行しないとtensor tensorのエラーが出る可能性があります。
Docker imageのbuild
いよいよbuildします。
$ docker build -t docker_flask .
-tオプションの後にイメージの名前を好きにつけてください。最後の.はカレントディレクトリを指しています。
ちなみにそこそこ時間かかります。
最後に以下のコマンドでコンテナを起動して、接続します。
$ docker run -p 5000:5000 -it docker_flask /bin/bash
requirements.txtを生成(おまけ)
herokuや次から設定が面倒な人は、requirements.txtを設定しておくと便利です。
dockerコンテナに接続した状態で、以下のコマンドを実行します。
$ pip freeze > requirements.txt
このrequirements.txtの中身を元にherokuなどに引き継げます。
参考
以下のリンクは参考になりました。
Data Analyst Meetup Tokyo(damt) vol.7に参加しました!
こんばんは!
株式会社エウレカさんで開催されたData Analyst Meetup Tokyoに参加してきましたので、備忘録として残しておきたいと思います。
Meetupの感想としては、mercariの樫田さんと直接お話ができたり、THE GUILDのGo AndoさんのLTが聞けたりと最高でした!
この記事では、LTの学びや今回のMeetupを通しての学びを共有できたらと思います。
- Data Analyst Meetup Tokyoとは?
- Data Analyst Meetup TokyoのLT
- Data Analyst Meetup Tokyo(damt)での学び
Data Analyst Meetup Tokyoとは?
そもそもこのData Analyst Meetup Tokyo (damt)が何なのかを紹介します。connpassから抜粋すると以下のような感じです。
Data Analyst Meetupという名前の通り、この会は事業会社でデータ分析を担当するデータアナリスト/データサイエンティストの集まりです
つまり各社のデータサイエンティストやデータ分析に携わる人がノウハウや実務に関する話をする会のようなものです。
mercariの樫田さんはこの会をデータアナリストのコミュニティと表現しており、どんどん親睦を深めてくださいとおっしゃっていました。
続きを読む
非エンジニアがOSS開発にコミットした話
この度小さな規模ですが、OSSにコミットしたのでその方法と過程をシェアしたいと思います。
今回コミットしたプロジェクトはこれです。
主にRuby on Railsで利用するgemです。
Railsでログイン機能を実装する際にdeviseという有名なgemがあるのですが、上記のgemを併用するとログインページのデザインをbootstrapでいい感じにしてくれます。
続きを読むGethによるEthereumブロックチェーン入門の入門 (Gethセットアップ篇)
本記事の目的・対象読者
本記事ではEthereumのフルクライアントであるGethを使ったブロックチェーンの入門の入門を取り扱います。対象読者は下記のような方です。
- ブロックチェーンに技術的な興味がある
- 将来dAppsなどの分散型アプリケーションの開発をしてみたい
- ethereumを技術側から触ってみたい
- 詳しいことは置いといて、とりあえず自分のPCでethereumの送金を試したい
また、著者もブロックチェーンを勉強中です。自分へのメモとしても公開しています。
すでに詳しい方で「こんな情報あるよ」「ここが間違っているよ」などがありましたら、コメントに残していただけると幸いです。
また入門の入門なのでブロックチェーンの概念やEthereumの詳解などは致しません。
上記の項目を了承いただいた上で読み進めていただけると幸いです。
Gethとは
前述したように今回取り扱うGethは、Ethereumのフルクライアントになります。Gethを使うと下記のことができるようになります。
etherはEthereumの暗号通貨になります。各ノードでこのetherをやりとりします。また、トランザクションは1回の取引(送金)を指します。
トランザクションについて詳しく知りたい方は下記のブログが参考になると思います。
Gethをインストールする
Mac OSにインストールする方
Mac OSの方はhomebrewからのインストールが可能です。
まず、xcodeがインストールされていない方は、xcodeをインストールします。次にターミナルから下記のコマンドを実行します。
$ xcode-select --install
続いて、下記のコマンドを実行すればHomebrewのインストールができます。
$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)" ==> This script will install: /usr/local/bin/brew /usr/local/Library/... /usr/local/share/man/man1/brew.1 ==> The following directories will be made group writable: /usr/local/. /usr/local/bin /usr/local/lib /usr/local/share /usr/local/share/doc ==> The following directories will have their group set to admin: /usr/local/bin /usr/local/share /usr/local/share/doc Press RETURN to continue or any other key to abort ==> /usr/bin/sudo /bin/chmod g+rwx /usr/local/. /usr/local/bin /usr/local/lib /usr/local/share /usr/local/share/doc WARNING: Improper use of the sudo command could lead to data loss or the deletion of important system files. Please double-check your typing when using sudo. Type "man sudo" for more information. To proceed, enter your password, or type Ctrl-C to abort. Password: ==> /usr/bin/sudo /usr/bin/chgrp admin /usr/local/bin /usr/local/share /usr/local/share/doc ==> /usr/bin/sudo /bin/mkdir /Library/Caches/Homebrew ==> /usr/bin/sudo /bin/chmod g+rwx /Library/Caches/Homebrew ==> Downloading and installing Homebrew... remote: Counting objects: 184874, done. remote: Compressing objects: 100% (50748/50748), done. remote: Total 184874 (delta 133006), reused 184810 (delta 132957) Receiving objects: 100% (184874/184874), 36.91 MiB | 57.00 KiB/s, done. Resolving deltas: 100% (133006/133006), done. From https://github.com/Homebrew/homebrew * [new branch] master -> origin/master HEAD is now at 601338e Remove proc handling from BuildEnvironment ==> Installation successful! ==> Next steps Run `brew doctor` before you install anything Run `brew help` to get started
続いて、homebrewからgethをインストールします。
下記コマンドを実行して完了です。
$ brew tap ethereum/ethereum $ brew install ethereum
Ubuntuにインストールする方
Ubuntuにインストールする方は下記のコマンドを実行することでGethを自分のマシンに取り込むことができます。
$ sudo add-apt-repository -y ppa:ethereum/ethereum $ sudo apt-get update $ sudo apt-get install ethereum
Gethを動かしてみる
それでは実際にインストールしたGethを自分のマシンで動かしてみます。
genesisファイルを作成する
任意のディレクトリにブロック情報やgenesisファイルを格納するフォルダを作成します。
著者はデスクトップから動かしたかったので、下記のコマンドで実行しました。
$ mkdir ~/desktop/eth_private_net
上記のディレクトリに移動し、ディレクトリ内にmygenesis.jsonを作成してください。下記のjsonコードを入力して保存します。
{ "config":{ "chainId":15 }, "nonce":"0x0000000000000042", "timestamp":"0x0", "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "extraDate":"", "gasLimit":"0x8000000", "difficulty":"0x4000", "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase":"0x3333333333333333333333333333333333333333", "alloc":{} }
このjsonファイルには最初のブロック(genesisブロック)の情報が書かれています。主な情報は下記になります。
genesisブロックの初期化
下記のコマンドでgenesisブロックを初期化することができます。
$ geth --datadir ~/desktop/eth_private_net init ~/desktop/eth_private_net/myGenesis.json INFO [03-21|18:42:34] Maximum peer count ETH=25 LES=0 total=25 INFO [03-21|18:42:34] Allocated cache and file handles database=/Users/username/desktop/eth_private_net/geth/chaindata cache=16 handles=16 INFO [03-21|18:42:34] Writing custom genesis block INFO [03-21|18:42:34] Persisted trie from memory database nodes=0 size=0.00B time=17.266µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B INFO [03-21|18:42:34] Successfully wrote genesis state database=chaindata hash=7b2e8b…7e0432 INFO [03-21|18:42:34] Allocated cache and file handles database=/Users/username/desktop/eth_private_net/geth/lightchaindata cache=16 handles=16 INFO [03-21|18:42:34] Writing custom genesis block INFO [03-21|18:42:34] Persisted trie from memory database nodes=0 size=0.00B time=3.252µs gcnodes=0 gcsize=0.00B gctime=0s livenodes=1 livesize=0.00B INFO [03-21|18:42:34] Successfully wrote genesis state database=lightchaindata hash=7b2e8b…7e0432
Geth起動
実際にGethを起動します。
$ geth --networkid "15" --nodiscover --datadir "~/desktop/eth_private_net" console 2>> ~/desktop/eth_private_net/geth_err.log
少し長いですが、一つずつ見ていきます。
- networkid
- ここで整数のIDを指定することで、ライブネットとは異なるネットワークを起動することが可能です。genesisブロックで指定したchainIdと同じものを指定しましょう。
- console
- Gethには採掘やトランザクションの生成などを対話的に進めることができるコンソールが用意されています。consoleオプションでそのコマンドを立ち上げることが可能です。
- geth_err.log
- cosoleで立ち上げるlogが格納されているファイルです。
下記のlogが出たら成功です。
Welcome to the Geth JavaScript console! instance: Geth/v1.8.2-stable/darwin-amd64/go1.10 modules: admin:1.0 debug:1.0 eth:1.0 miner:1.0 net:1.0 personal:1.0 rpc:1.0 txpool:1.0 web3:1.0 >
実際にgenesisブロックを見てみましょう。
> eth.getBlock(0)
{ difficulty: 16384, extraData: "0x", gasLimit: 134217728, gasUsed: 0, <略> uncles: [] }
こんな感じにgenesisブロックの情報が表示されたら成功です!
下記のコマンドでgethのconsoleを終了できます。
>exit
さてgethのセットアップが完了したところで、次に実際にehtherの採掘をしてみます。
現在情報を整理している最中なので、少々お待ちください。
GethによるEthereumブロックチェーン入門の入門 その2
GethによるEthereumブロックチェーン入門の入門 その3
参考にした記事
「それ、根拠あるの?と言わせないデータ・統計分析ができる本」で学んだこと
あけましておめでとうございます!
2018年もよろしくお願いします!
年末年始は空き時間に本を読んでいまして、ちょうど読み終わった本があったのでメモがてら残しておきます。
現在Rettyでデータ分析をしているのですが、そのデータ分析の入門書のようなものを借りていました。学んだことをいくつかシェアします!
「それ、根拠あるの?」と言わせないデータ・統計分析ができる本
- 作者: 柏木吉基
- 出版社/メーカー: 日本実業出版社
- 発売日: 2014/04/04
- メディア: Kindle版
- この商品を含むブログ (1件) を見る
- それ、根拠あるの?と言わせないデータ・統計分析ができる本とは
- 平均、中央値、分散、標準偏差について
- 相関係数と回帰分析について
- 相関係数を扱う際に注意点について
- (1)単なるデータの偶然
- (2)単に"関連"のあるデータの組み合わせ
- (3)疑似相関
- (4)因果関係の有無
- (5)原因を1つだけと決めてしまうリスク
- (6)データの期間
- 回帰分析でより具体的な施策に落とし込む
- 相関係数を扱う際に注意点について
- 2018年はもっと色々な分析方法を勉強したい
続きを読む
2017年をまとめておく
2017年も残すところ2日になって、だんだん年の瀬感が増してきましたね。
去年もやったのですが、今年も1年間をまとめておこうと思います。
僕自身の1年間ですが、今年は昨年比べると落ち着いた年だったように思えます。ただし、学びもたくさんあったのでその辺をこの記事に残せたらと思ってます。
- スタートアップでの1年間
- マーケの仕事について
- マーケの仕事の反省
- 進路を考え始めた秋
- 自分は何がやりたいのか
- 自分の立ち位置を考えた
- 逆求人のイベントに参加
- 就職活動を始めた冬と環境の変化
- 1年2ヶ月いたスタートアップをやめる
- 新たな環境
- 自分でサービスを作ることに関して
- 2018年に向けて
続きを読む