制限緩和後、あらためて EC2 の H2O を起動。
メモリは 120GB 確保。
java -Xmx120g -jar h2o.jar
split は相変わらずダメでしたが、XGBoost 、Deep Learning ともに、最後まで走りました。ただ、データの質が良くなく、結果はボロボロ。
1試行20分程度でしたので、グリッドサーチを考えるとやはり GPU が欲しいところ。XGBoost は GPU 対応でしたので、次に必要に迫られた場合には試行してみましょう。
データを動かしてみて、見つかった不都合個所を改善し、再度計算へ。大規模データでもこのループを回せるようになりました。が、まだまだ終わりがなさそうです。
なお、今回の課金は$40弱。初年度無料枠に加え、昨年の SageMaker 講習会で $25 のクーポンをいただいていましたので、最終的には数百円の出費になるようです。安く済ませることができました。
2019年1月5日土曜日
2019年1月4日金曜日
インスタンスタイプの変更
EC2 の H2O を起動。
メモリは56GB確保。
java -Xmx56g -jar h2o.jar
11GB の csv 読み込みは OK。
splitはダメ。うーん、メモリ? H2O? Java? の限界。
Jupyter 経由で CSV を分割し、再度 H2O へ。
今度はモデリングまで到達しましたが、ここにきてメモリエラー。より大きなインスタンスが必要でした。見誤りました。
Java heap space', caused by java.lang.OutOfMemoryError: Java heap space
#e Thread WARN: Swapping! GC CALLBACK, (K/V:29.58 GB + POJO:23.09 GB + FREE:3.33 GB == MEM_MAX:56.00 GB), desiredKV=9.82 GB OOM!
SagerMaker に移行。
が、こちらも、データクレンジング時にメモリーエラー。EC2同様、メモリ64GBでは不足でした。うーん。失敗。
Machine Learning ではどうか?
こちらはOK。データ量に応じてスケールアップしてくれるようです。
が、Machine Learning では細かい調整ができません。EC2, SageMaker にて、より多くのメモリを積んでいるインスタンスで動かすしかなさそうですね。
まずは 既存のインスタンスを右クリックから「インスタンスの設定」-「インスタンスタイプの変更」で メモリ128GB の r5d.4xlarge に変更。これはすぐ反映されました。簡単!
で、開始。
が、始まりません。
You have requested more instances (1) than your current instance limit of 0 allows for the specified instance type. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit.
制限緩和のリクエストが必要とのこと。そういえば、以前実施したことがありますね。左の「制限」から該当インスタンスを見ると以下の通り示されています。
実行中のオンデマンドインスタンスの数: r5d.4xlarge 0
取り急ぎリクエストしておきましょう。
メモリは56GB確保。
java -Xmx56g -jar h2o.jar
11GB の csv 読み込みは OK。
splitはダメ。うーん、メモリ? H2O? Java? の限界。
Jupyter 経由で CSV を分割し、再度 H2O へ。
今度はモデリングまで到達しましたが、ここにきてメモリエラー。より大きなインスタンスが必要でした。見誤りました。
Java heap space', caused by java.lang.OutOfMemoryError: Java heap space
#e Thread WARN: Swapping! GC CALLBACK, (K/V:29.58 GB + POJO:23.09 GB + FREE:3.33 GB == MEM_MAX:56.00 GB), desiredKV=9.82 GB OOM!
SagerMaker に移行。
が、こちらも、データクレンジング時にメモリーエラー。EC2同様、メモリ64GBでは不足でした。うーん。失敗。
Machine Learning ではどうか?
こちらはOK。データ量に応じてスケールアップしてくれるようです。
が、Machine Learning では細かい調整ができません。EC2, SageMaker にて、より多くのメモリを積んでいるインスタンスで動かすしかなさそうですね。
まずは 既存のインスタンスを右クリックから「インスタンスの設定」-「インスタンスタイプの変更」で メモリ128GB の r5d.4xlarge に変更。これはすぐ反映されました。簡単!
で、開始。
が、始まりません。
You have requested more instances (1) than your current instance limit of 0 allows for the specified instance type. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit.
制限緩和のリクエストが必要とのこと。そういえば、以前実施したことがありますね。左の「制限」から該当インスタンスを見ると以下の通り示されています。
実行中のオンデマンドインスタンスの数: r5d.4xlarge 0
取り急ぎリクエストしておきましょう。
2019年1月3日木曜日
S3-EC2 データコピー
S3 に上げた 18GB のファイルを Sagemaker のインスタンス (ml.m5.4xlarge) へコピー。
これ、爆速でした。
アップに数時間かかったのに、AWS内でのコピーは 数十秒。驚き。csv に変換できるかな?と試したところ、できました。64GB のメモリ選択で正解でした。
再度、作成した 11GB の csv を S3 へコピー。こちらは1分弱。ま、早いでしょう。
SageMaker でのファイルコピーは Jupyter 上から Python で行ったのですが、
EC2へはコマンドをたたきました。
・S3からローカルにファイルをコピー
$ aws s3 cp s3://バケット名/ディレクトリ名/ファイル名 ./ディレクトリ名/
・EC2からS3にファイルをコピー
$ aws s3 cp ディレクトリ名/ファイル名 s3://バケット名/ディレクトリ名/
こちらも速いなあ、と思ってみてますと、途中でエラーを吐きました。
download failed: [Errno 28] No space left on device
容量確認。
ubuntu@ip:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 50G 0 disk
└─nvme1n1p1 259:1 0 8G 0 part /
ボリュームを50GBに拡大していましたが、パーティションはそのままでした。50Gに拡大します。
ubuntu@ip:~$ sudo growpart /dev/nvme1n1 1
ubuntu@ip:~$ lsblk
nvme1n1 259:0 0 50G 0 disk
└─nvme1n1p1 259:1 0 50G 0 part /
OK。再度コピーしました。
が、エラーを吐きます。
ubuntu@ip:~$ aws s3 cp s3://
download failed: [Errno 28] No space left on device
容量は空いています。
ubuntu@ip:~$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/nvme1n1p1 1024000 185280 838720 19% /
で、お決まりの reboot 。
すんなりコピーできました。
これ、爆速でした。
アップに数時間かかったのに、AWS内でのコピーは 数十秒。驚き。csv に変換できるかな?と試したところ、できました。64GB のメモリ選択で正解でした。
再度、作成した 11GB の csv を S3 へコピー。こちらは1分弱。ま、早いでしょう。
SageMaker でのファイルコピーは Jupyter 上から Python で行ったのですが、
EC2へはコマンドをたたきました。
・S3からローカルにファイルをコピー
$ aws s3 cp s3://バケット名/ディレクトリ名/ファイル名 ./ディレクトリ名/
・EC2からS3にファイルをコピー
$ aws s3 cp ディレクトリ名/ファイル名 s3://バケット名/ディレクトリ名/
こちらも速いなあ、と思ってみてますと、途中でエラーを吐きました。
download failed: [Errno 28] No space left on device
容量確認。
ubuntu@ip:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 50G 0 disk
└─nvme1n1p1 259:1 0 8G 0 part /
ボリュームを50GBに拡大していましたが、パーティションはそのままでした。50Gに拡大します。
ubuntu@ip:~$ sudo growpart /dev/nvme1n1 1
ubuntu@ip:~$ lsblk
nvme1n1 259:0 0 50G 0 disk
└─nvme1n1p1 259:1 0 50G 0 part /
OK。再度コピーしました。
が、エラーを吐きます。
ubuntu@ip:~$ aws s3 cp s3://
download failed: [Errno 28] No space left on device
容量は空いています。
ubuntu@ip:~$ df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/nvme1n1p1 1024000 185280 838720 19% /
で、お決まりの reboot 。
すんなりコピーできました。
2019年1月2日水曜日
S3 の課金
元旦早々、「S3 で1か月の無料枠突破に近いよ」という趣旨のメールが届きました。
S3 への平均15GB×2回のアップロードで put request が1700回を超えた模様。2回ともエラーでアップロードできなかったのですが、カウントは進んでいる状況のようでした。
その後、18GBの h5 ファイルを WinSCP でアップできたのですが、現段階で以下の表示。
Amazon Simple Storage Service 2,000 Put Requests of Amazon S3
100.00%(2,000.00/2,000 Requests)
うーん。なんだか釈然としません。
当面、私の環境ではS3標準のアップロード機能を避けましょう。
S3 への平均15GB×2回のアップロードで put request が1700回を超えた模様。2回ともエラーでアップロードできなかったのですが、カウントは進んでいる状況のようでした。
その後、18GBの h5 ファイルを WinSCP でアップできたのですが、現段階で以下の表示。
Amazon Simple Storage Service 2,000 Put Requests of Amazon S3
100.00%(2,000.00/2,000 Requests)
うーん。なんだか釈然としません。
当面、私の環境ではS3標準のアップロード機能を避けましょう。
2019年1月1日火曜日
EC2 + H2O, Jupyter Notebook
SageMaker で XGBoost による Binary classification を整備。
ビルトインアルゴは Docker で展開。CPU のみでした。import は csv か LibSVM のみ。オンプレミスでの RAPIDS に比べ、メリットはあまりないですね。ま、両者とも H2O で使えるので大規模データの変換に使えるかもしれません。
次は、EC2 に H2O を投入。H2O は CPU 版なので、メモリ大きめの m4.4xlarge を選択。これは以前に実装したことがあったので、容易に進みました。
そしてAnaconda。同じくEC2 に実装しようとしたのですが、はまりました。
インストールして再起動。jupyter notebook でサーバーは立ち上がるのですが、クライアントから接続できません。ポートは解放済みですが。
調べてみると、設定ファイルを作らないとダメでした。最初から Deep Learning AMI でインスタンスを作っておけばよかったのですが。
https://docs.aws.amazon.com/ja_jp/dlami/latest/devguide/setup-jupyter-config.html
Jupyter サーバーの設定
SSL 証明書を作成します。
$ cd
$ mkdir ssl
$ cd ssl
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout "cert.key" -out "cert.pem" -batch
パスワードを使用してクライアントから Jupyter ノートブックサーバーにログインすると、サーバー上のノートブックにアクセスできます。ここでJupyter を一度起動させておいたほうが良いでしょう。
iPython ターミナルを開きます。
$ ipython
iPythonPrompt> from IPython.lib import passwd
iPythonPrompt> passwd()
パスワードハッシュ (sha1:examplefc216:3a35a98ed... など) を記録します。
exit
終了してから、
Jupyter 設定ファイルを編集します。
~/.jupyter/jupyter_notebook_config.py
c = get_config() # Get the config object.私の環境では c.NotebookApp.ip = '*' がダメでした。 c.NotebookApp.ip = '0.0.0.0' でサーバーが立ち上がりました。バージョン違いでしょうか。 ま、次からは大丈夫ですね。
c.NotebookApp.certfile = u'/home/ubuntu/ssl/cert.pem'
c.NotebookApp.keyfile = u'/home/ubuntu/ssl/cert.key'
c.NotebookApp.ip = '*'
c.NotebookApp.open_browser = False
c.NotebookApp.password = 'sha1:fc216:3a35a98ed980b9...'
クライアントから簡単な試算も行い、チェック終了。
いざ、本番ということで S3 に 18GB 近いファイルをアップロードしようとしたら、エラー。アップできません。弱りました。
2018年12月31日月曜日
やり残し事項 2018-2
今年は地すべり、崩壊、基礎、海上など、スタンダードな調査モノが半分、デスクワークが半分でした。
道具では、思いがけず VRS を使えるようになりました。が、課題に挙げていた2点はそのまま。帯磁率計は来年度購入したいところ。
技術面では、機械学習関連が進みました。
クラウド、GPU利用含め環境を整備し、ストレスなく?計算までたどり着けるようになりました。が、容易に計算できるようになると、今度はデータの質に目が向いてしまいます。今後はデータ収集・整理の仕組みづくりが課題になるでしょう。
ただ、やり残し事項は何一つ進まず。来年はSAR を加えて一つは解決したいところです。
以下、やり残し事項です。
道具
帯磁率計
ガンマ線測定器(携帯型)
技術
動的解析(耐震、液状化)
斜面設計
SAR
コード・ソフト
優先度低:DtransuのCUDA化・・・100万で購入可。
優先度低:PSInSAR・・・700万で購入可
優先度中:地表流+地下水・・・GSFLOW、HydroGeoSphere
優先度中:GMS・・・J-SHISの取り込みまではできました。いつか続きを。
優先度中:OpenMI・・・PHREEQCとDtransuの連成等
中期目標は2年目も進展なし。コチラにシフトしないといけないかな。
道具では、思いがけず VRS を使えるようになりました。が、課題に挙げていた2点はそのまま。帯磁率計は来年度購入したいところ。
技術面では、機械学習関連が進みました。
クラウド、GPU利用含め環境を整備し、ストレスなく?計算までたどり着けるようになりました。が、容易に計算できるようになると、今度はデータの質に目が向いてしまいます。今後はデータ収集・整理の仕組みづくりが課題になるでしょう。
ただ、やり残し事項は何一つ進まず。来年はSAR を加えて一つは解決したいところです。
以下、やり残し事項です。
道具
帯磁率計
ガンマ線測定器(携帯型)
技術
動的解析(耐震、液状化)
斜面設計
SAR
コード・ソフト
優先度低:DtransuのCUDA化・・・100万で購入可。
優先度低:PSInSAR・・・700万で購入可
優先度中:地表流+地下水・・・GSFLOW、HydroGeoSphere
優先度中:GMS・・・J-SHISの取り込みまではできました。いつか続きを。
優先度中:OpenMI・・・PHREEQCとDtransuの連成等
中期目標は2年目も進展なし。コチラにシフトしないといけないかな。
大規模データの扱い
メモリに載らない大規模データを、機械学習にかけたい場合にどうするか?
1.メモリに載るように細分したデータを作成
ただし、計算時にオーバーフローする可能性あり。
2.メモリ容量のより大きなマシンで動かす
2-1.PC購入
高価。
2-2.クラウド利用(AWS)
2-2-1. EC2, Cloud Formation
https://phreeqc.blogspot.com/2018/10/aws-2.html
AWS マーケットプレイスに H2O あり。
無料のCPU版でも動くが、計算遅い。
GPU版はソフトの購入が必要(400万)。
2-2-2.SageMaker
コードを準備する必要あり。
=問題に応じて自由にスクラッチ可能。
=汎用性を持たせるのは困難
2-2-3. Machine Learning
H2O ライクでお手軽。
データは 100GB まで。
ロジスティック回帰のみ。
思いつくのはこの程度。本当はまだまだ選択肢(と正解)があるのでしょう。
傍にプロが欲しい。
1.メモリに載るように細分したデータを作成
ただし、計算時にオーバーフローする可能性あり。
2.メモリ容量のより大きなマシンで動かす
2-1.PC購入
高価。
2-2.クラウド利用(AWS)
2-2-1. EC2, Cloud Formation
https://phreeqc.blogspot.com/2018/10/aws-2.html
AWS マーケットプレイスに H2O あり。
無料のCPU版でも動くが、計算遅い。
GPU版はソフトの購入が必要(400万)。
2-2-2.SageMaker
コードを準備する必要あり。
=問題に応じて自由にスクラッチ可能。
=汎用性を持たせるのは困難
2-2-3. Machine Learning
H2O ライクでお手軽。
データは 100GB まで。
ロジスティック回帰のみ。
思いつくのはこの程度。本当はまだまだ選択肢(と正解)があるのでしょう。
傍にプロが欲しい。
登録:
投稿 (Atom)