Kotlinの読み方 (Androidアプリ開発言語)
Google I/Oでの新発表。
で、どう読むのか?
- 日本勢: ことりん
- 英語勢: コットリン(アクセントはコットが強くて、リンは弱め)
- 以下の動画で、9秒くらいから3回くらいKotlin言うので聴いてください
公式回答
It is usually pronounced with the same sound as in “cot”: http://www.dictionary.com/browse/cot99
jupyter で ModuleNotFoundError: No module named 'tensorflow' エラー
What?
- Installing TensorFlow on Mac OS X | TensorFlow に沿ってインストール
from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data.read_data_sets("MNIST_data/", one_hot=True) --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-1-3a141fdd5d37> in <module>() ----> 1 from tensorflow.examples.tutorials.mnist import input_data 2 mnist = input_data.read_data.read_data_sets("MNIST_data/", one_hot=True) ModuleNotFoundError: No module named 'tensorflow'
How to resolve?
- pip で tensorflow をもう一度インストール
$ pip install tensorflow
Why?
- 失敗したパッケージ
- tensorflow-1.1.0-py3-none-any.whl
- appdirs-1.4.3 numpy-1.12.1 packaging-16.8 protobuf-3.3.0 pyparsing-2.2.0 setuptools-35.0.2 six-1.10.0 tensorflow-1.1.0 werkzeug-0.12.1 wheel-0.29.0
- 成功したパッケージ
- OS X 用のパッケージになっていなかったぽい(チュートリアルに沿ってるんだけどな。。。)
問題の切り分けで試したこと
- jupyter notebook を立ち上げず、コンソールで直接試す
- コンソールから見ると、Tensorflow用の仮想環境は立ち上がっている
- OK (問題なくimportできる) -> jupyter notebookからの読み込みが上手くいかない
(tensorflow) $ python Python 3.6.0 |Anaconda custom (x86_64)| (default, Dec 23 2016, 13:19:00) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow >>> from tensorflow.examples.tutorials.mnist import input_data
Anaconda navigatorを再起動して、もう一度試す
- NG (同じ) -> 立ち上げっぱなしが原因ではない
tensorflow仮想環境から直接 jupyter notebook を立ち上げてみる
- NG (同じ) -> 立ち上げる場所が原因ではない
tensorflow仮想環境から直接立ち上げた jupyter notebook で
import tensorflow
1行を実行してみる- NG (同じ) -> サンプルコードが間違っているわけではない
どのjupyter notebookが起動されているのか?
/Users/kz/anaconda/envs/tensorflow/bin/jupyter_mac.command ; exit;
- OK -> tensorflow環境のjupyter notebookが起動されている
tensorflowインストール時のpipがどこに紐付いていた?
- OK -> tensorflow環境に紐ついている
$ which pip /Users/kz/anaconda/envs/tensorflow/bin/pip
- コマンドラインから Jupyter notebook をインストールし、立ち上げ
- NG (同じ) -> なんやこれJupyter notebookからだけ読めんやんけ
- 参考: python - No module named tensorflow in jupyter - Stack Overflow
(tensorflow) $ conda install jupyter notebook Package plan for installation in environment /Users/kz/anaconda/envs/tensorflow: (tensorflow) $ which jupyter notebook /Users/kz/anaconda/envs/tensorflow/bin/jupyter (tensorflow) $ jupyter notebook [I 18:03:32.381 NotebookApp] Serving notebooks from local directory: /Users/kz
- conda listでtensorflowが出るか?
- NG -> あれ?出てこない?
(tensorflow) $ conda list | grep tensorflow # packages in environment at /Users/kz/anaconda/envs/tensorflow:
- そうだ。pipでインストールしたから、condaには登録されていない
- ここに原因があるのでは?
(tensorflow) $ echo $TF_PYTHON_URL https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.1.0-py3-none-any.whl (tensorflow) $ pip install --ignore-installed --upgrade $TF_PYTHON_URL (tensorflow) $ pip freeze | grep tensorflow tensorflow==1.1.0
- 初心に帰って、conda仮想環境を立ち上げ直してみる
- NG -> 変わらない
(tensorflow) $ source deactivate tensorflow $ source activate tensorflow (tensorflow) $
- 公式QAに頼る
- うまく紐付けできてない人がいた
- 参考: ImportError: No module named tensorflow - Can't install Tensorflow · Issue #5478 · tensorflow/tensorflow · GitHub
- Jupyterで利用可能なカーネルが増えた -> NG。。。
$ source activate tensorflow (tensorflow) $ jupyter kernelspec list Available kernels: python3 /Users/kz/anaconda/envs/tensorflow/share/jupyter/kernels/python3 (tensorflow) $ pip install ipykernel Requirement already satisfied: ipykernel in ./anaconda/envs/tensorflow/lib/python3.6/site-packages (tensorflow) $ python -m ipykernel install --user --name tensorflow --display-name "conda env tensorflow" (tensorflow) $ jupyter kernelspec list Available kernels: tensorflow /Users/kz/Library/Jupyter/kernels/tensorflow python3 /Users/kz/anaconda/envs/tensorflow/share/jupyter/kernels/python3 (tensorflow) $ jupyter notebook
-m: モジュールを指定して実行 install: カーネルをインストールする --user: 現在ログイン中のユーザにインストール --name: カーネルスペックの名前を指定 --display-name: 表示されるカーネルの名前を指定
(tensorflow) $ conda --version conda 4.3.17 (tensorflow) $ conda install conda=4.2 Fetching package metadata ........... InstallError: Install error: Error: 'conda' can only be installed into the root environment (tensorflow) $ source deactivate tensorflow $ conda --version conda 4.3.17 $ conda install conda=4.2 Fetching package metadata ........... Solving package specifications: . Package plan for installation in environment /Users/kz/anaconda: The following packages will be DOWNGRADED due to dependency conflicts: conda: 4.3.17-py36_0 --> 4.2.16-py36_0 Proceed ([y]/n)? y conda-4.2.16-p 100% |######################################################################| Time: 0:00:00 428.78 kB/s $ conda --version conda 4.2.16
- 念押しでtensorflowをもう一度インストール
- できた。。。。
$ pip install tensorflow Collecting tensorflow Downloading tensorflow-1.1.0-cp36-cp36m-macosx_10_11_x86_64.whl (31.3MB) ... Installing collected packages: numpy, protobuf, werkzeug, tensorflow Successfully installed numpy-1.12.1 protobuf-3.3.0 tensorflow-1.1.0 werkzeug-0.12.1
Mac OS X でTensorflowインストール、Hello world
- https://www.tensorflow.org/install/install_mac を参考に、Anacondaベースでインストールする
基本の流れ
先立って、Anacondaをインストールしておく
“tensorflow"という名称でconda環境を作る
$ conda create -n tensorflow Fetching package metadata ........... Solving package specifications: Package plan for installation in environment /Users/kz/anaconda/envs/tensorflow: Proceed ([y]/n)? y # # To activate this environment, use: # > source activate tensorflow # # To deactivate this environment, use: # > source deactivate tensorflow #
- condaの"tensorflow"環境をアクティベート
$ source activate tensorflow (tensorflow) $
- pipを使ってインストール(追記アリ)
$ TF_PYTHON_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.1.0-py3-none-any.whl (tensorflow) ~$ echo $TF_PYTHON_URL https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.1.0-py3-none-any.whl (tensorflow) ~$ pip install --ignore-installed --upgrade $TF_PYTHON_URL (omit) Installing collected packages: six, numpy, pyparsing, packaging, appdirs, setuptools, protobuf, werkzeug, wheel, tensorflow Successfully installed appdirs-1.4.3 numpy-1.12.1 packaging-16.8 protobuf-3.3.0 pyparsing-2.2.0 setuptools-35.0.2 six-1.10.0 tensorflow-1.1.0 werkzeug-0.12.1 wheel-0.29.0
追記:
- この後 jupyter で ModuleNotFoundError: No module named 'tensorflow' エラー - kz-engineer -SCRAP- でハマる
- マニュアルどおりでなく
pip install tensorflow
するべき
Hello world で validation してみる
$ python Python 3.6.0 |Anaconda custom (x86_64)| (default, Dec 23 2016, 13:19:00) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() 2017-05-13 14:25:30.045839: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations. 2017-05-13 14:25:30.045866: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations. 2017-05-13 14:25:30.045872: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX instructions, but these are available on your machine and could speed up CPU computations. 2017-05-13 14:25:30.045877: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use AVX2 instructions, but these are available on your machine and could speed up CPU computations. 2017-05-13 14:25:30.045882: W tensorflow/core/platform/cpu_feature_guard.cc:45] The TensorFlow library wasn't compiled to use FMA instructions, but these are available on your machine and could speed up CPU computations. >>> print(sess.run(hello)) b'Hello, TensorFlow!'
改善
- 警告が気になる
- ソースからコンパイルするともっと早くなるという警告なので、無視していい
- ログメッセージレベルを調整して出ないようにする
- 参考: https://github.com/tensorflow/tensorflow/issues/7778
>>> import os >>> os.environ['TF_CPP_MIN_LOG_LEVEL']='2'
- OK!
>>> import os >>> import tensorflow as tf >>> os.environ['TF_CPP_MIN_LOG_LEVEL']='2' >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello)) b'Hello, TensorFlow!'
疑問点
b'Hello, TensorFlow!'
のb'
って何。。。
Anacondaとは?インストール方法
Why?
- 機械学習の勉強のためにTensorflowを入れようとしたら必要だった
What?
- 楽にデータサイエンス向けの環境を整えられる
- AnacondaはPythonの数値計算環境を構築するためのパッケージをまとめた無料のディストリビューション
- コンパイル済みのパッケージ (バイナリーディストリビューション)
- NumPy,SciPy,matplotlib, 機械学習ライブラリscikit-learnとかとかがまとめて入っている
- Python と conda のみの最小構成Minicondaもある
- できること
- 独自のパッケージ管理システム (conda) を内包
- Anaconda 上で有効な
- 環境分離ツール
- 複数のPython バージョンの切り替え環境
How to install?
確認
$ python --version Python 3.6.0 :: Anaconda custom (x86_64) $ python Python 3.6.0 |Anaconda custom (x86_64)| (default, Dec 23 2016, 13:19:00) [GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import numpy >>> numpy.__file__ '/Users/kz/anaconda/lib/python3.6/site-packages/numpy/__init__.py'
合わせて読む
Docker
Dockerの利用方法の変化
- 最初は、プログラマが自分専用の開発・テスト環境を用意するため
- 昔はインフラエンジニアが手順書通りに環境設定していた
- 小さなチームで開発するアプリケーションの場合は、Dockerで必要なライブラリがインストールしてある環境をコンテナイメージに固めておけば楽
- 実サービスでコンテナ利用をする
- 各環境での環境差異を防ぐ
- dockerコマンドで、コンテナイメージをデプロイするだけでOK
- 参照: Dockerによるコンテナ化アプリケーションの運用設計ガイド(パート1) | RED HAT OPENEYE
サービス環境への展開を楽にする
- サービスの停止時間をできるだけ短くしたい
- 問題があったときに、すぐに切り戻したい
- Kudernetes などのオーケストレーションツールを使う(Bule-Green deployment)
- マイクロサービスアーキテクチャを使って、影響範囲を狭める
- 参照: Google Container Engineで五目並べアプリのAPIサーバーを作るデモ - めもめも
3大メリット
- プログラマが自分専用の開発・テスト環境を簡単に用意するため
- 各環境での環境差異を防ぐため
- 継続的デリバリの実現
Kubernetesを使ったBule-Green Deployment
設定ファイル
- Deployment (高可用性の担保)
- ある機能を提供するコンテナをどんな構成でデプロイするかの指定
- Service
- コンテナに対するネットワークを構成するかの指定
- Deployment (高可用性の担保)
Kubernetesのコンテナクラスタ管理の構造
Bule-Green Deployment
- Deployment
- 既存コンテナと新しいバージョンのコンテナを並行稼動させる
- Service
- 外部ユーザのアクセスを既存コンテナへ、内部テストユーザのアクセスを新しいコンテナへ振り分ける
- テスト完了後に、外部ユーザのアクセスも新しいコンテナへ振り分ける
- Deployment
Dockerの基本機能
Dockerイメージ作成機能(Build)
- プログラム本体, ライブラリ, ミドルウェア, OS, ネットワークの設定などを1つにまとめられる
- 実体は、アプリ実行に必要なファイル群のディレクトリツリー
- DockerfileにDockerイメージの構成情報を記載する
- Dockerfileを元にビルドすると、Dockerイメージになる
- Docker イメージは、実行環境で動くコンテナのベースになる
Dockerコンテナ実行機能(Run)
Dockerイメージ共有機能(Ship)
コンテナ実行環境構築のフルマネージメントサービス
- コンテナ統合管理ツールの必要性
- Dockerをマルチホスト環境で成立したクラスタ構成で稼働させるため
- コンテナ起動停止、ホスト間のネットワーク接続、ストレージの管理、コンテナスケジューリング、監視が必要
GCP
- 準備
- コンテナ実行環境構築
- 構成: 2 Node
- Console menu > Container Engine > Make Container cluster: 2
- 無停止バージョンアップ
- KubernetesのRolling Update機能を使用
アプリデプロイの流れ
- Dockerfile作成
- Cloud shellを起動して、コードを取得
- Dockerコンテナの元になるDockerイメージを指定(FROM命令)
- 作成者情報(MAINTAINER命令)
- コマンド実行(RUN命令)
- ポート関数(EXPOSE命令)
- デプロイ(ADD命令)
- サーバ起動(CMD命令)
- Dockerイメージビルド
docker build
でDockerfileからイメージ作成(verタグを付ける)docker images
で作成済みのイメージが確認できる
- Dockerイメージの公開
- Dockerイメージにタグを付ける
- タグがついたら、Google Container Registryにアップロードできる (gcloudコマンド)
- Console menu > Container Engine > Container Registryで確認
- GKEから利用できる状態になった!
- 初めてのDeploy
- Cloud shellで認証情報取得(gcloud get-credentials)
- デプロイ構成情報ファイル(deployment.yaml)の作成、デプロイ先指定
- コンテナデプロイ設定ファイル (
kubectl create -f deployment.yaml
) - コンテナに外部からアクセスするためのサービス定義ファイル(
kubectl create -f service.yaml
) - EXTERNAL-IP にアクセスして確認する
- 二回目のDeploy
- イメージ作成、レジストリアップロード
- Rolling Udpate機能でバージョンアップ
- クラスタの停止、削除
kubectl delete service web-service
-> GLBの設定も破棄kubectl delete deployment web-container
- Console menue > Container Engine > Container cluster > Delete Docker image
Laravel の新しいプロジェクトの作成
前提
- Composerがインストールしてあること
How to
Laravel の新しいプロジェクトの作成は、新しいプロジェクトのディレクトリを作成することである
- 具体的には、composer でフレームワークの新規プロジェクトを作成する
Laravel のインストール(数分かかる)
git clone
して、composer install
を動かすのと同じ動きをしている
$ composer create-project laravel/laravel --prefer-dist project_name $ cd project_name $ php artisan --version Laravel Framework 5.4.17
参照
Macにcomposerをbrewでインストール
What?
- これじゃインストールできない
$ brew install composer ... Error: No similarly named formulae found. ==> Searching taps... These formulae were found in taps: homebrew/php/composer Caskroom/cask/multimarkdown-composer homebrew/php/composer@1.2 Caskroom/versions/multimarkdown-composer-beta Caskroom/cask/multimarkdown-composer-pro To install one of them, run (for example): brew install homebrew/php/composer
How to?
$ brew install homebrew/php/composer