ASUS Chromebook C434TA を手に入れた
背景
学生時代からずっとMacを使ってきましたが、 仕事柄もっとクラウドを有効活用したいと思うようになったので Chromebook+GCPでいこうという試みです。 OSにとらわれず、環境に囚われず。。。というのが理想です。
マシン構成など
マシン
ASUS Chromebook C434TA
ASUS Chromebook Flip C434TA | 2-in-1 製品 | ASUS 日本
選定理由としては以下になります。 (本当は米国Amazonから直輸入すればよいのかもですが 初のChromebookということもありヒヨリました)
- サポートが最低でも2024年までは続くこと
- RAMが4GBではなく、8GBであること
- タッチパネルであること
- 国内で手厚いサポート(主に修理)ができること
OS
Google Chrome OS バージョン: 75.0.3770.129(Official Build) (64 ビット)
※2019/07/12時点でOSアップデートを行いました。
アカウント
Gmailのアカウントを2つ使ってます。 一つは普段の生活で使っているアカウント、もう一つは開発などを行う際に使うアカウントです。 ON/OFFを切り替える。。。という意味もありますが、このあたりは好みかと。
Chromebookの場合、ログイン中に他のアカウントへの切り替えも簡単にできるので ちょっと面倒ですが、まぁ使えなくはないといった感じです。
追加APL
Play Storeに対応しているので、とりあえず使いそうなものを各アカウントでインストールしました。
- Kindle
- Udemy
- Coursera
UdemyとかCourseraはChromeブラウザから利用できるので要らないかも。 ブラウザで出来るものは、ブラウザを使う方が世界観として正しい?
開発環境(Python)
ネットワークに接続していないときに完全に文鎮になるのが嫌なので Linux(Crostini)を有効にしてローカルにも開発環境を構築中。 当面はPython使いになると思うので、以下の手順でPython3.7をインストールしてみた。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile source .bash_profile sudo apt-get install gcc sudo apt-get install make sudo apt-get install zlib1g-dev sudo apt-get install build-essential checkinstall sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \ libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev sudo apt install libffi-dev pyenv install 3.7.3 pyenv versions pyenv global 3.7.3 python --version
これで、3.7.3を表示されたら完了です。 DeepLearning系の実験をしたりを考えるとAnacondaでも良かったかもですが GoogleColab.などもあるので今回は見送りました。
IDEはとりあえず最近よく使ってるvscodeを入れる。 CrostiniなのでLinux的な手法であればインストールはできるとふんだ。
こちらの記事を参考にインストールする。
ChromebookでもVisual Studio Code を使おう - Satsangah - Medium
curl -L "https://go.microsoft.com/fwlink/?LinkID=760868" > vscode.deb sudo apt install ./vscode.deb
これで「Linuxアプリ」にもVisualStdioCodeが入っていることが確認できる。
CloudShellでPython3をインストールしてみる。
目的
CloudShellにCodeEditorなるGUIエディタがあることを知った。 ベータ版とはいえ、Eclipseのプロジェクトが元になっているらしいので、これ使えないかな? 諸事情があってブラウザで開発が完結する環境がほしかったのでPython環境を整える。 (まずは使ってみるの精神)
手順
CloudShellは裏はおそらく何某かのコンテナだと思います。 Debianとはいえ、apt-getなどでソフトを入れると接続するたびに内容が消えてしまう。 /homeはpersistentディスクとして提供されているので、ここにインストールする必要があると考えた。
実際、StackOverFlowでも同じ話があった。
これを参考にすると、定番のpyenvを使ってインストールするのが良さそうだったので。 pyenvを使ってPython3.7.3をインストールしてみた。 インストール手順、そのものは公式のGitに手順が乗っているのでそちらを参考にした。
https://github.com/pyenv/pyenv#installation
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile $ echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile $ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile $ source .bash_profile $ pyenv install 3.7.3 $ pyenv global 3.7.3
なにか動かしてみる。
flaskでHello World的なものを使って動かしてみる。
pip install flask
CodeEditorを使って以下のコードを作成する。
from flask import Flask app = Flask(__name__) @app.route("/") def home(): return "Hello, World!" if __name__ == "__main__": app.run(debug=True)
こんな感じで実行すると待受ポートがわかる。 あとは、「ウェブでプレビュー」を使って、動作確認をする。
$ python main.py * Serving Flask app "main" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: on * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat * Debugger is active! * Debugger PIN: 198-418-586
まとめ
CloudShell関連の機能をつかって無料の範囲で簡単な開発はできることがわかった。
感想としては業務の基幹システムを作るわけではないので個人レベルなら、まぁありかなと思いました。 マイクロサービスアーキテクチャの考え方に従って、サービスを細かく作るなら世界観なら悪くない気がします。 あとはDBとか外部のI/Fまわりをローカルで開発するときにどうするのか?など、あるある話をどうするかですね。 クラウドの時代、それすらもOn DemandでVM作るなり、GAEのようなPaaSを使えば良いので本質ではないか。
GitHubで100MBを超えるファイルを。
GitHubで100MBを超えるファイルを扱う
職場がまだSVNを使っているので長らくGitも触ってなかったのですが、
諸事情でいろいろとGitHubにコードを公開・非公開で管理したい理由ができて来ました。
本来はコードをアップロードするのでそんな大きなファイルを上げることは滅多に無いのですが ふと大きなファイルをアップロードしようとしたらできなかったので対策。
Mac
システム全体で有効にするまで。
brew install git-lfs git lfs install git lfs init --system
Windows
システム全体で有効にするまで。
からダウンロードして
git lfs install git lfs init --system
GCP de Kaggleの事始め
GCP de Kaggleの事始め
DeepLearning系の資格も一通り取得したのでKaggleに本格参戦するため、GCPを使っていこうと思います。
なぜGCPかというと、BigQueryを将来的に使いたいからです。 このあたりはAWSより優れていると思ってます(AWSも好きなサービスではあるのですが)。 近いうちにGCPの資格も取得しようと思ってますので、もし取得出来たら感想でも書こうかと思います。
環境構築の方法とコマンドのメモを残そうと思います。
環境構築
以下を参考にしました。
無料枠のまま、何もしないとGPUが使えないのでGPU(All Region)が使えるように申請を出すのがポイントでした。 リージョンごとの設定も必要ですが、この全体設定的なやつが盲点でした。 何も知らないで申請したらデプロイに失敗して、はて?と思って時間を浪費しました。。。
コマンド
※随時追加していきます。
# インスタンス一覧 gcloud compute instances list # 電源ON gcloud compute instances start --zone us-west1-b kaggle-base-vm # 停止 gcloud compute instances stop --zone us-west1-b kaggle-base-vm # VMにsshで接続(VM名がkaggle-base-vmで、デフォルトリージョンに存在する場合) gcloud compute ssh kaggle-base-vm # Docker Build(イメージを作る時) # Dockerfile等は同じディレクトリにある。 docker build ./ -t kaggle_baase # コンテナ起動(projectをmount状態で起動) mkdir project docker run --runtime=nvidia -p 8888:8888 -d -v ~/project:/root/user/project --name test kaggle_base /sbin/init # コンテナ状態確認 docker ps # コンテナ接続 docker exec -it test /bin/bash # JypyterNoteBook起動@コンテナ cd project mkdir code data jupyter notebook --ip=0.0.0.0 --port 8888 --allow-root # 手元のPCからJupyterNoteBookに接続(Windowsだと-N -f -Lの-fは不要だった) gcloud compute ssh "kaggle-base-vm" -- -N -L 28888:localhost:8888
Dockerコンテナが消えた!?
事件です。
Windowsをアップデート(1709)したら、 DockerDesktop(Windows)でMobyLinuxVMがHyper-Vに登録されなくなりました。
リセットで、MobyLinuxVM自体が消えるとは思いもせず。。。
原因
どうもHyper-VにMobyLinuxVMを登録するときに問題が発生しているようで。 以下のようなエラーが出力されるようになりました。
Unable to create: ユーザー設定変数 "ErrorActionPreference" または共通パラメーターが Stop に設定されているため、実行中のコマンドが停止しました。Inconsistent parameters PolicyStore PersistentStore and Dhcp Enabled
対策
最近は英語圏でも調査したほうが沢山情報があると思ってるので、本家のStackOverFlowなどで調査しました。 結果的に有効なのはCiscoAnyConnectを停止してDockerを起動することでした。 VPN接続のために使っている(使わされている)のですが、どうにも相性が悪いらしく。 CiscoAnyConnectが停止中はDockerが元気になります。 DriveShareも動くようになりました。
例えばこんな感じで停止させて。
$services = @("nam","namlm","vpnagent") foreach($service In Get-Service $services | Where-Object {$_.status -ne "stopped"}){ Stop-Service $service } echo "`r`n<<< Cisco Any Connect Service Status >>>" Get-Service $services | Format-Table -Property DisplayName, Status
例えばこんな感じで起動。
$services = @("nam","namlm","vpnagent") foreach($service In Get-Service $services | Where-Object {$_.status -eq "stopped"}){ Start-Service $service } echo "`r`n<<< Cisco Any Connect Service Status >>>" Get-Service $services | Format-Table -Property DisplayName, Status
するようなバッチなりを用意するのが良さそうです。
ちょっとクラウドで何か作ってみよう。その1。
ブレストというより落書き。
仕事と試験勉強しながら、果たしてどの程度進められるか...
マイペースに進めます。
GoogleColab.のタイムアウトを防ぐ
GoogleColabを使っていると以下のルールがあるらしく計算途中に計算結果が失われる模様。
- 【12時間ルール】新しいインスタンスを起動してから12時間経過
- 【90分ルール】ノートブックのセッションが切れてから90分経過
12時間ルールは如何ともし難いので以下を参考にして、Chromeの拡張機能で凌ぐことにしました。
↓↓↓
https://qiita.com/Gimina_Graph/items/4bdf3e3c3658eeb0eba8
これでDeepLearningFromScratchの自習が捗るはず。
(PCが貧弱すぎて。。。)