views4GCPのストレージサービスについてまとめてみた。Exp:23510闇の戦士です。TrainerTweetShareHatena注意この記事は2017年12月20日に更新されたもので、内容が古い可能性がありますのでご注意ください。Engine(MLEngine)を使えば、ローカルマシンで時間のかかる学習ジョブを高速化することができます。今回は、MLEngineを使う方法を紹介し、更にGPUを使って学習ジョブがどの程度高速化するのかを実演します。結果を見ていきましょう。Boost使用時最大2.9GHz)となっております。$0.16では、結果について細かく見ていきます。Expertsを行います。畳み込みニューラルネットワークを用いて手書き文字の認識をするお馴染みのトレーニングですね。ローカルで実行した際のログを以下に示します。--13時54分55秒だいたい75分くらいかかっていますね。これをMLEngineを使って高速化させようというのが今回の趣旨です。GCP上での実行の事前準備GCP上でGPUを使用するためには、申請をしてGPUの割り当てを確保する必要があります。GPUのリソースを確保する必要があります。GPUにはP100とK80の2種類ありますが、今回は比較的安価なK80を使用します。GPUのリソースを申請する際は、チェックをつけて画面上部の「割り当てを編集」から必要事項を入力してリクエストを申請してください。リクエストが処理されるとメールが1通送信されてくるので、リソースを確認しましょう。この際の注意事項として、現在GPUを使用できるリージョンは限られています。詳細は下記リンクを御覧ください。利用することにします。MLEngineで必要になりますので、ここで指定したのと同じリージョンに、RegionalなGCSバケットを1つ作成してください。実際にMLEngineへ学習ジョブをリクエストするためにはgcloudコマンドを使用する必要があります。--region=asia-east1このコマンドを、以下のようなディレクトリの親ディレクトリで実行します。学習のプログラムになります。__init__.pyは空で大丈夫です。$BUCKETには、それぞれMLEngineコンソールで管理するジョブ名と、先程作成したバケット名を指定します。“gpuTest”、作成したバケットが”mljob-bucket”であるなら、具体的なコマンドは以下のようになります。--region=asia-east1このままでは通常のCPU処理になってしまうので、GPUを使用する場合は以下のようにオプションを付与してあげます。--scale-tier=basic-gpu成功すれば、以下のようにレスポンスが返ってきます。QUEUEDでは、MLEngineのコンソールで確認してみましょう。正常に処理されると、MLEngineのジョブリストの中にこのようなレコードが現れます。経過時間は12分14秒となっていますが、プロビジョンも含めての時間なので、実際のプログラム実行時間はもっと短いはずです。print()の出力はログに吐き出されますので、ログを確認します。簡便のため、必要な文字列のみ抽出します。--8時39分27秒3分とちょっとの時間で学習が完了していることが確認できますね、GPUすごい。使用料金は12分の使用分だけかかってしまうのですが、GPUがCPUに比べて高速に学習ジョブを処理できるのがわかります。続いて費用を見ていきましょう。詳細はこちらに記載されていますが、MLEngineの料金は少し複雑です。ジョブの詳細を確認すると、このような画面が表示されます。消費したMLユニットです。詳細のリンクにも記載がありますが、使用したリソースによって単位時間あたりの使用量が異なります。基本となる、GPUを使用しないジョブの料金の計算式は以下のようになります。学習時間(分)スケール階層とは、学習ジョブに対して割り当てたリソースを指します。