まずは、Studio ノートブックインスタンス環境を立ち上げていきましょう。Amazon SageMaker Studio では実行するノートブック毎にインスタンスを選ぶことができ、それを Studio ノートブック のインスタンスと呼びます。AWS のコンソール画面から Amazon SageMaker のダッシュボードを開き Amazon SageMaker の「 今すぐ始める 」から SageMaker Studio をクリックしてください、必要な設定を入れて数分待つと Jupyter ノートブック環境が起動します。
開始方法については、 こちら にも詳細がありますので 1-12 までを実践してみてください。
起動が完了するとこちらのような Amazon SageMaker Studio の画面が立ち上がります。
もし学習コードのリポジトリに Git をご利用であれば、上記の Amazon SageMaker Studio 画面内で「 FIle 」タブ→「 New 」→「 Terminal 」を選択すると Terminal 起動ができますので、git clone でお手持ちのソースコードの持ち込みができます。今回は AWS Samples からBERT (Bidirectional Encoder Representations from Transformers) という自然言語処理モデルの学習コードを clone しましょう。
git clone 対象はこちら»
以降では、本学習コードを用いて、文書分類タスクでしばしば用いられる DBpedia データセットから文書分類用学習モデルを作成し、input したテキストがどのような話題についてのものか (Company, EducationalInstitution, Artist, Athlete, OfficeHolder・・・といった) 14 の Classに 分類する推論用エンドポイントを作成していきます。今回は説明用に一部コードを変更していますが、そのまま実行いただいても問題なく動作します。
一度、git clone が完了すると Studio ノートブックインスタンス上で学習コードを実行することが可能です。画面左側のファイルエクスプローラから BertTextClassification.ipynb をダブルクリックしてサンプルノートブックを開いてください。
ノートブックの実行環境を選択するプロンプトが開いたら、今回は「 Python3 (Data Science) 」カーネルを選択し、「 Select 」 をクリックしてください。
今回利用するカーネルには、あらかじめ SageMaker の Python SDK や、Pandas、Numpy、matplotlib といったデータサイエンスでよく用いられるパッケージがインストールされています。その他、必要なパッケージはユーザーが自由にカスタマイズしてインストールすることが可能です。カーネルが立ちあがるとノートブックの上部に起動しているカーネルとインスタンスの CPU/GPU、メモリが表示されます。
また、赤く囲った部分をクリックしていただくと、選択できるインスタンスタイプ一覧が表示されます。デフォルトは推奨のもの (ml.t3.medium) が設定されていますので、インスタンスタイプを変更したい場合はこちらからご選択ください。ちなみに、今回は GPU インスタンスである ml.g4dn.xlarge を選択しています。
※その他、利用可能なカーネルの詳細は、 こちら をご参照ください。
なお、Studio ノートブックインスタンスにおいては、学習データの前処理や、SageMaker SDK を利用した持ち込み学習コードのトレーニングジョブを実行します。必要なパッケージインストールと前処理ができたら、トレーニングジョブの前準備として Estimator クラスを定義する必要があります。(見やすくするため git の学習コードからパラメータの記載を一部変更しています。)
変更前
estimator = PyTorch(
entry_point='main.py',
source_dir = 'src',
role=role,
framework_version ="1.4.0",
py_version='py3',
instance_count=1,
instance_type=instance_type,
hyperparameters = hp,
output_path=s3_output_path,
metric_definitions=metric_definitions,
volume_size=30,
code_location=s3_code_path,
debugger_hook_config=False,
base_job_name =base_name,
use_spot_instances = use_spot,
max_run = train_max_run_secs,
max_wait = max_wait_time_secs,
checkpoint_s3_uri=s3_checkpoint,
checkpoint_local_path=sm_localcheckpoint_dir)
変更後
hpo_estimator = PyTorch(entry_point ='main.py',
source_dir = 'src',
role = role,
framework_version = "1.4.0",
py_version ='py3',
instance_count = 1,
instance_type = "ml.p3.xlarge",
output_path = s3_output_path,
debugger_hook_config = False,
use_spot_instances = False,
hyperparameters = {
"epochs" : 10,
#検索対象のハイパーパラメータを除外
#"lr":0.00001,
#"batch" : 32,
"trainfile" :s3_uri_train.split("/")[-1],
"valfile" : s3_uri_val.split("/")[-1],
"classfile":s3_uri_classes.split("/")[-1],
},
metric_definitions = [
{"Name": "TrainLoss","Regex": "###score: train_loss### (\d*[.]?\d*)"},
{"Name": "ValidationLoss","Regex": "###score: val_loss### (\d*[.]?\d*)"},
{"Name": "TrainScore","Regex": "###score: train_score### (\d*[.]?\d*)"},
{"Name": "ValidationScore","Regex": "###score: val_score### (\d*[.]?\d*)"}
],)
この Estimator クラスでは、マネージドな PyTorch コンテナを呼び出し、コンテナ内で実行する持ち込み学習コードの指定、学習用インスタンスのタイプ指定、スポットインスタンスの利用設定、ハイパーパラメータ、監視メトリクスなどの定義ができます。
※Estimator クラスで指定できるパラメータの詳細は こちら をご参照ください。
学習コード側で必要な改修は、この Estimator で定義したハイパーパラメータを引数として受け渡すのみで、そのまま動かすことが可能です。Estimator を定義したら学習に必要な引数を fit 関数に渡してあげて実行すると学習が開始します。
estimator.fit(inputs)