1. HOME
  2. ブログ
  3. IT技術
  4. SageMakerでPyTorchを動かしてみた

SageMakerでPyTorchを動かしてみた

SageMaker( セージメイカー)の本格活用時代に入った

2019年12月、ラスベガスで『AWS Re:Invent(エーダブリューエス リ:インヴェント)』が行われました。

そのイベントを見た印象ですが、機械学習関連のサービスが拡充されて、いよいよ SageMaker( セージメイカー) も、本格活用時代に入ったのではと感じています。

昨年に発表された当初は、MxNet(エムエックスネット)と、ビルトインAmazonアルゴリズム中心で、いまひとつ使い勝手が悪い印象でした。

環境が整った

ですが、昨年後半から PyTorch がサポートされるようになり、今回、PyTorch1.0~1.3 がシームレスにサポートされて、使いやすい環境になってきました。

そこで、今回 Pytorch を使ってみる事を中心に、SageMaker を紹介したいと思います。

さらに、「既存の PyTorchプログラム」と「SageMaker 上の PyTorch」の違いにも注目していきます!

Jupyter(ジュパイター)インスタンスの準備

まず、Jupyter インスタンスの準備を行います。

SageMakerインスタンスを起動し、「SageMaker Example」タブをクリックします。

すると、AWSでサポートされている各種機能の、サンプルを見ることができます。

この中から、「SageMaker Python SDK 」を選択

今回は、MNIST を AWS が SageMaker 用に改造した、pytorch_mnist.jpynb を選びます。

右側のオレンジ色の「USE」ボタンを押すと、サンプルから実行ディレクトリーにコピーされて開きます。

Kernel(カーネル)の切り替え

SageMaker では、Jupyterノートブックを、AWS でチューニングされた Kernel に切り替えて、実行することができるというのが、大きな特徴です。

重要なのは、正しい Kernel をセットすることです。

右上に、現在選択されている、Kernel が表示されています。

conda_pytorch_p36 以外になっている場合

選択されているものが、「conda_pytorch_p36」以外になっている場合、表示されている部分を押します。

ドロップダウンボックスを表示し、「conda_pytorch_p36」に切り替えます。

準備完了

これで準備完了です。

正しくセットされていた場合、1のコードセルをクリックし、緑色にして実行すると、エラーが発生せずに終わります。

以下、コードセルを順に実行していけば、MNIST の動きを確認することができます。

一行目で、 SageMakerSDK を import していることに注目して下さい。

エラーが発生する場合

Kernel が正しく選ばれていないと、途中で「import するライブラリが見つかりません」というエラーになります。

昨年までは、 Kernel へのプリインストールライブラリのサポートが不十分で、エラーが発生。

自前でライブラリを入れる事が、多々ありました。

うってかわって、現在の Kernel では、エラーなく動かすことができます。

もしエラーになった場合、「Kernelが正しくセットされているか?」、また「セルを上から順に実行しているか?」を疑ってみて下さい。

SageMaker Python SDKの概要

SageMaker は、コンテナ技術を活用して、主に学習管理を主眼として作られたサービスです。

そして、SageMaker Python SDK は、主に SageMaker で Python を使い機械学習を実行させるために、必要な機能を集めたライブラリです。

SDK は、多くのサンプルからのカスタマイズを行うか、自前のアルゴリズムを用いることで、機械学習のタスクを実行できるように作られています。

SDK を理解するには

また、「SDK」は多くの機能を持っています。

次の4つの機能の理解が、SDK を理解する第一歩となるでしょう。

1:SageMaker で学習用のコンテナとやりとりをして、学習管理をする機能

2:S3 上のデータセットを置いて、コンテナとやりとりして、学習を準備する機能

3:学習の管理
実際の学習を行うときには、別コンテナ上でジョブとして動きますので、これの実行管理をおこなうことができ、さらには、ジョブの結果のモデルを保存しておいてくれる機能があります。SageMaker の最大のメリットは、このジョブ管理によって、学習に最適な大きさのインスタンスを選ぶことで、コストを最適化させて、実行することができることです。

4:学習用パラメータの管理
実際の学習では、各種パイパーパラメータを変えて実行していきますが、前述の学習管理に紐づいてハイパーパラメータも管理されますので、実際の機械学習の研究・開発で大いに役立ちます。

mnist.jpynb コードの解説

データの準備

torchvision を使ってデータをダウンロードし、これを学習用に S3 にアップロードします。

PyTorchコンテナの設定と準備

pytorchコンテナの設定を行います。

SDK の中での、コア機能になります

この中で「pytorch のバージョン」、「トレーニングさせるインスタンスタイプ」、「トレーニングのハイパーパラメータ」をセットします。

entry_point に、「実際に使う pythonファイルを指定している事」に、注目して下さい。

コンテナは、プログラム上で「esitimater」と呼ばれています。

つまりここで、 SageMaker Python SDK は、あらかじめ準備されたコンテナを、動的に呼び出して、実行準備をしています。

コードセルにある、 estimaer.fit() の命令が重要です。

この命令を実行することで、先ほど準備されたコードを実行し、学習がコンテナ上で動くことになります。

ちなみに、esitimater は、PyTorch 用以外に、Tensorflow 用など、サポートしている機械学習フレームワークごとに存在しています。

mnist.py 側のコードの解説

これは、mnist.py からの重要な部分、train関数の定義部分です。

Estimater.fit() ですが、実際には、コンテナ上の entry_point のtrain関数を呼び出します。

argsオブジェクトには、実際に Jupyterプログラムの estimater 内で定義した、ハイパーパラメータなどが格納されています。

既存の PyTorchプログラムを、SageMaker で動かすためには、学習からモデルの保存部分を、この train関数として定義する必要があります

PyTorch のサンプル

PyTorch には、多くのサンプルが存在しています。

それらについては、AWS が「Additional Example Github Python Tutorial」に公開されています。

ですので、今回と同じ方法でコピーして動かすことができます。

また、AWSは定期的にサンプルが追加されています。

時々、サンプルをチェックすると、思わぬ発見があるかもしれません。

さいごに

SageMaker を使うコツは、コンテナ技術で構成されていることをしっかりと意識しましょう。

すなわち、「Estimator」について、よく知ることです。

このように、SageMaker を使うことで、PyTorch のプログラムを簡単に実行することが出来ます。

しかも「パラメータを変更しながら学習を繰り返すことで結果を得る」という、機械学習での研究開発の、泥臭い部分をJupyter 上で簡単に行うことができます。

以前の環境に比べて、エラーが少なく、とても使いやすい環境に進化していると思います。

是非試してみてください!

(株)ライトコードは、WEB・アプリ・ゲーム開発に強い、「好きを仕事にするエンジニア集団」です。
機械学習でのシステム開発依頼・お見積もりはこちらまでお願いします。
また、機械学習系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

※現在、多数のお問合せを頂いており、返信に、多少お時間を頂く場合がございます。

こちらの記事もオススメ!

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事