生成的データ インテリジェンス

Amazon SageMaker Studio ローカルモードと Docker サポートで ML ワークフローを高速化 |アマゾン ウェブ サービス

日付:

の 2 つの新機能を発表できることを嬉しく思います。 Amazon SageMakerスタジオ 機械学習 (ML) 実践者向けの反復開発を加速します: ローカル モードと Docker のサポート。 ML モデルの開発では、開発者がコーディング、トレーニング、デプロイを切り替えるため、反復サイクルが遅くなることがよくあります。各ステップでは、リモート コンピューティング リソースが起動するまで待機する必要があるため、実装の検証や変更に関するフィードバックの取得が遅れます。

ローカル モードを使用すると、開発者は、リモート コンピューティング リソースを起動することなく、SageMaker Studio ノートブック インスタンス上でモデルのトレーニングとテスト、コードのデバッグ、エンドツーエンドのパイプラインの検証を直接行うことができるようになりました。これにより、反復サイクルが数分から数秒に短縮され、開発者の生産性が向上します。 SageMaker Studio ノートブックでの Docker サポートにより、開発者は Docker コンテナを簡単に構築し、事前に構築されたコンテナにアクセスできるため、チーム全体に一貫した開発環境が提供され、時間のかかるセットアップや依存関係の管理が不要になります。

ローカル モードと Docker のサポートにより、SageMaker Studio ノートブック上で実行されるローカル コンテナを使用して、コードの変更を検証し、モデルのプロトタイプを作成するための合理化されたワークフローが提供されます。

実例。この投稿では、SageMaker Studio でローカル モードを設定し、サンプル トレーニング ジョブを実行し、モデルをデプロイする方法を説明します。 アマゾンセージメーカー SageMaker Studio ノートブックからのエンドポイント。

SageMaker Studio ローカル モード

SageMaker Studio にはローカル モードが導入されており、リモート コンピューティング リソースを必要とせずに、JupyterLab、コード エディター、または SageMaker Studio Classic ノートブック インスタンス上で SageMaker トレーニング、推論、バッチ変換、ジョブの処理を直接実行できるようになります。ローカル モードを使用する利点は次のとおりです。

  • 統合開発環境 (IDE) 内でのワークフローの即時検証とテスト
  • 小規模ジョブのローカル実行による反復の高速化により、出力を検査し、問題を早期に特定します
  • リモート トレーニング ジョブの待ち時間をなくすことで、開発とデバッグの効率が向上しました。
  • クラウドで完全なジョブを実行する前に、コード変更に関する即時フィードバック

次の図は、SageMaker のローカル モードを使用したワークフローを示しています。

SageMaker のローカル モードを使用したワークフロー

ローカルモードを使用するには、次のように設定します。 instance_type='local' トレーニングや推論などの SageMaker Python SDK ジョブを実行するとき。これにより、クラウド リソースをプロビジョニングする代わりに、SageMaker Studio IDE によって使用されるインスタンス上でそれらが実行されます。

分散トレーニングなどの特定の機能はクラウドでのみ利用できますが、ローカル モードを使用すると、迅速な反復のためにコンテキストを切り替える必要がなくなります。 SageMaker の能力とスケールを最大限に活用する準備ができたら、クラウドでワークフローをシームレスに実行できます。

SageMaker Studio での Docker サポート

SageMaker Studio では、SageMaker Studio ノートブック インスタンス上でローカルに Docker コンテナを構築して実行できるようになりました。この新機能により、SageMaker のトレーニングと推論に使用する前に、SageMaker Studio で Docker イメージを構築して検証できるようになります。

次の図は、SageMaker Studio 内の高レベルの Docker オーケストレーション アーキテクチャを示しています。

SageMaker Studio 内の高レベルの Docker オーケストレーション アーキテクチャ

SageMaker Studio の Docker サポートにより、次のことが可能になります。

  • 統合されたモデルと依存関係を含む Docker コンテナを SageMaker Studio 内で直接構築します
  • 外部の Docker ビルド プロセスの必要性を排除し、イメージの作成を簡素化します。
  • モデルを実稼働環境にデプロイする前に、コンテナーをローカルで実行して機能を検証します。
  • トレーニングとホスティングのために SageMaker にデプロイするときにローカル コンテナを再利用する

この記事の執筆時点では、マルチコンテナーやカスタム ネットワークなどの一部の高度な Docker 機能はサポートされていませんが、コアのビルドおよび実行機能は、Bring Your Own Container (BYOC) ワークフローのコンテナー開発を加速するために利用できます。

前提条件

SageMaker Studio アプリケーションでローカル モードを使用するには、次の前提条件を満たしている必要があります。

  • 画像を取得する場合 Amazon エラスティック コンテナ レジストリ (Amazon ECR)、ECR イメージをホストするアカウントは、ユーザーのアクセス許可を提供する必要があります。 アイデンティティおよびアクセス管理 (IAM) の役割。ドメインのロールでは、Amazon ECR アクセスも許可する必要があります。
  • ローカル モードと Docker 機能を有効にするには、 EnableDockerAccess ドメインのパラメータを true に設定します DockerSettings AWSコマンドラインインターフェイス (AWS CLI)。これにより、ドメイン内のユーザーはローカル モードと Docker 機能を使用できるようになります。デフォルトでは、ローカル モードと Docker は SageMaker Studio で無効になっています。 Docker サービスの更新を有効にするには、既存の SageMaker Studio アプリを再起動する必要があります。以下は、SageMaker Studio ドメインを更新するための AWS CLI コマンドの例です。
aws sagemaker --region <REGION> 
update-domain --domain-id <DOMAIN-ID> 
--domain-settings-for-update '{"DockerSettings": {"EnableDockerAccess": "ENABLED"}}'

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecr:CompleteLayerUpload",
        "ecr:UploadLayerPart",
        "ecr:InitiateLayerUpload",
        "ecr:BatchCheckLayerAvailability",
        "ecr:PutImage"
      ],
      "Resource": "arn:aws:ecr:us-east-2:123456789012:repository/<repositoryname>"
    },
    {
      "Effect": "Allow",
      "Action": "ecr:GetAuthorizationToken",
      "Resource": "*"
    }
  ]
}

ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する

SageMaker Studio JupyterLab およびコード エディター (ベース) Code-OSS、Visual Studio Code – オープンソース) は SageMaker Studio を拡張し、人気の軽量 IDE を使用して分析コードと ML コードを作成、テスト、デバッグ、実行できるようにします。 SageMaker Studio IDE の使用を開始する方法の詳細については、以下を参照してください。 Amazon SageMaker Studio での生産性の向上: JupyterLab Spaces と生成 AI ツールの紹介 & 新機能 – Code-OSS VS Code オープンソースに基づくコードエディターが Amazon SageMaker Studio で利用可能になりました。 次の手順を実行します。

ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する

  • 新しいターミナルを作成します。  ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する
  • 次の手順に従って、Docker CLI と Docker Compose プラグインをインストールします。 GitHubレポ。連鎖したコマンドが失敗した場合は、コマンドを一度に 1 つずつ実行します。

ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する SageMaker SDK を最新バージョンに更新する必要があります。

  • ラン pip install sagemaker -Uq ターミナルで。

コード エディターの場合のみ、現在のターミナルで実行されるように Python 環境を設定する必要があります。

  • コード エディターで、 ファイルメニュー¸選ぶ 環境設定 & 設定.

ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する

  • 検索して選択します ターミナル: ファイルディレクトリで実行.

ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する

  • コード エディターまたは JupyterLab で、 scikit_learn_script_mode_local_training_and_serving フォルダを実行し、 scikit_learn_script_mode_local_training_and_serving.py ファイルにソフトウェアを指定する必要があります。

を選択してスクリプトを実行できます。 ラン コード エディターで、または JupyterLab ターミナルで CLI を使用して。 ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する モデルがローカルでどのようにトレーニングされるかを確認できます。次に、モデルをローカルの SageMaker エンドポイントにデプロイし、二乗平均平方根誤差を計算します (RMSE). ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する ローカル モードを使用して SageMaker Studio スペースで Python ファイルを実行する

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

SageMaker Studio Classic のノートブックを使用して、小規模なトレーニング ジョブを実行することもできます。 CIFAR10 ローカル モードを使用して、モデルをローカルにデプロイし、推論を実行します。

ノートブックをセットアップする

ノートブックをセットアップするには、次の手順を実行します。

  • SageMaker Studio Classic を開き、以下のクローンを作成します。 GitHubレポ.

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • Video Cloud Studioで pytorch_local_mode_cifar10.ipynb notebook in blog/pytorch_cnn_cifar10.

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • 画像、選択する PyTorch 2.1.0 Python 3.10 CPU Optimized.

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする ノートブックに正しいインスタンスとカーネルの選択が表示されていることを確認します。 ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • を選択してターミナルを開きます ターミナルの起動 現在の SageMaker イメージ内。

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • 次の手順に従って、Docker CLI と Docker Compose プラグインをインストールします。 GitHubレポ.

SageMaker Studio Classic の Docker を使用しているため、ターミナルは既にスーパーユーザーで実行されているため、コマンドを実行するときに sudo を削除します。 SageMaker Studio Classic の場合、インストール コマンドは SageMaker Studio アプリ イメージ OS によって異なります。たとえば、DLC ベースのフレームワーク イメージは Ubuntu ベースであり、次の手順で機能します。ただし、DataScience イメージのような Debian ベースのイメージの場合は、次の手順に従う必要があります。 GitHubレポ。連鎖したコマンドが失敗した場合は、コマンドを一度に 1 つずつ実行します。 Docker のバージョンが表示されるはずです。 ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • ターミナル ウィンドウを開いたままにして、ノートブックに戻り、セルごとに実行を開始します。

必ずセルを実行してください pip install -U sagemaker SageMaker Python SDK の最新バージョンを使用していることになります。

現地研修

ローカルの SageMaker トレーニング ジョブの実行を開始すると、次のログ行が表示されます。

INFO:sagemaker.local.image:'Docker Compose' found using Docker CLI.
INFO:sagemaker.local.local_session:Starting training job

これは、トレーニングが Docker を使用してローカルで実行されていることを示します。

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

しばらくお待ちください。 pytorch-training:2.1-cpu-py310 Dockerイメージがプルされます。サイズが大きい (5.2 GB) ため、数分かかる場合があります。

Docker イメージは、SageMaker Studio アプリ インスタンスのルート ボリュームに保存されますが、エンドユーザーはアクセスできません。 Docker イメージにアクセスして操作する唯一の方法は、公開された Docker API 操作を介することです。

ユーザーの機密性の観点から、SageMaker Studio プラットフォームはユーザー固有の画像にアクセスしたり保存したりすることはありません。

トレーニングが完了すると、次の成功ログ行が表示されるようになります。

8zlz1zbfta-sagemaker-local exited with code 0
Aborting on container exit...
Container 8zlz1zbfta-sagemaker-local  Stopping
Container 8zlz1zbfta-sagemaker-local  Stopped
INFO:sagemaker.local.image:===== Job Complete =====

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

局所的な推論

次の手順を完了します。

  • SageMaker Local Mode を使用して SageMaker エンドポイントをデプロイします。

しばらくお待ちください。 pytorch-inference:2.1-cpu-py310 Dockerイメージがプルされます。サイズが大きい (4.32 GB) ため、数分かかる場合があります。

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • テスト イメージを使用して、ローカルにデプロイされた SageMaker エンドポイントを呼び出します。

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

予測されたクラス: カエル、船、車、飛行機が表示されます。

Predicted:  frog ship  car plane

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • SageMaker Local エンドポイントはまだ稼働しているため、開いているターミナル ウィンドウに戻り、実行中のコンテナを一覧表示します。

docker ps

走行中の様子が見られます pytorch-inference:2.1-cpu-py310 SageMaker エンドポイントをバックアップするコンテナ。

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • 一度に 1 つのローカル エンドポイントしか実行できないため、SageMaker ローカル エンドポイントをシャットダウンして実行中のコンテナを停止するには、クリーンアップ コードを実行します。

ローカル モードを使用して SageMaker Studio Classic でトレーニングと推論をシミュレートする

  • Docker コンテナが停止していることを確認するには、開いているターミナル ウィンドウに移動し、docker ps を実行して、実行中のコンテナがないことを確認します。
  • 実行中のコンテナが表示されたら、実行します docker stop <CONTAINER_ID> それを停止する。

SageMaker ローカル モードを使用するためのヒント

SageMaker を初めて使用する場合は、以下を参照してください。 機械学習モデルをトレーニングする。 SageMaker を使用した推論用のモデルのデプロイの詳細については、以下を参照してください。 推論用のモデルをデプロイする.

次の推奨事項に留意してください。

  • データセットとモデルの読み込みを理解するために、入力ファイルと出力ファイルとフォルダーを印刷します。
  • 迅速なテストには 1 ~ 2 エポックと小さなデータセットを使用します
  • Dockerfile に依存関係を事前インストールして環境セットアップを最適化する
  • デバッグのためにエンドポイントでシリアル化コードを分離する

Docker インストールをライフサイクル構成として構成する

Docker インストール プロセスをライフサイクル構成 (LCC) スクリプトとして定義して、新しい SageMaker Studio スペースが開始されるたびにセットアップを簡素化できます。 LCC は、スペース作成などのイベント中に SageMaker が実行するスクリプトです。を参照してください。 ジュピターラボ, コードエディターまたは SageMaker スタジオ クラシック LCC セットアップ (使用 ドッカーインストールcli 参考として)詳細をご覧ください。

Docker インストールをライフサイクル構成として構成する

Docker インストールをライフサイクル構成として構成する

SageMaker Studio スペースでカスタム Docker イメージを構築してテストする

このステップでは、JupyterLab (またはコード エディター) アプリ スペース内に Docker をインストールし、Docker を使用して SageMaker Studio スペースでカスタム Docker イメージを構築、テスト、公開します。スペースは、一部の SageMaker Studio アプリケーションのストレージとリソースのニーズを管理するために使用されます。各スペースは、アプリケーションのインスタンスと 1:1 の関係を持ちます。サポートされている作成されたすべてのアプリケーションには、独自のスペースが与えられます。 SageMaker スペースの詳細については、以下を参照してください。 Amazon SageMaker Studio での生産性の向上: JupyterLab Spaces と生成 AI ツールの紹介。 Docker イメージとアーティファクトに十分なストレージを確保できるように、少なくとも 30 GB のストレージを備えた新しいスペースを必ずプロビジョニングしてください。

スペース内に Docker をインストールする

Docker CLI および Docker Compose プラグインを JupyterLab スペース内にインストールするには、次のコマンドを実行します。 GitHubレポ。 SageMaker スタジオ Docker バージョン 20.10.X のみをサポートします.

Dockerイメージを構築する

Docker がインストールされ、JupyterLab スペース内で動作していることを確認するには、次のコードを実行します。

# to verify docker service
sagemaker-user@default:~$ docker version
Client: Docker Engine - Community
Version:           24.0.7
API version:       1.41 (downgraded from 1.43)
Go version:        go1.20.10
Git commit:        afdd53b
Built:             Thu Oct 26 09:07:41 2023
OS/Arch:           linux/amd64
Context:           default

Server:
Engine:
Version:          20.10.25
API version:      1.41 (minimum version 1.12)
Go version:       go1.20.10
Git commit:       5df983c
Built:            Fri Oct 13 22:46:59 2023
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.7.2
GitCommit:        0cae528dd6cb557f7201036e9f43420650207b58
runc:
Version:          1.1.7
GitCommit:        f19387a6bec4944c770f7668ab51c4348d9c2f38
docker-init:
Version:          0.19.0
GitCommit:        de40ad0

JupyterLab (またはコード エディター) スペース内でカスタム Docker イメージを構築するには、次の手順を実行します。

  • 空の Dockerfile を作成します。

touch Dockerfile

  • 次のコマンドを使用して Dockerfile を編集します。これにより、ホストされているベースの python:3.10.13-bullseye イメージから単純な flask Web サーバー イメージが作成されます。 Dockerハブ:
# Use the specified Python base image
FROM python:3.10.13-bullseye

# Create a code dir
RUN mkdir /code/

# Set the working directory in the container
WORKDIR /code

# Upgrade pip and install required packages
RUN python3 -m pip install --upgrade pip && 
python3 -m pip install flask

# Copy the app.py file to the container
COPY app.py /code/

# Set the command to run the app
ENTRYPOINT ["python", "app.py"]

次のコードは、フラスコ アプリケーション ファイルの例の内容を示しています。 app.py:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def hello():
return jsonify({"response": "Hello"})

if __name__ == '__main__':
app.run(host='0.0.0.0', port=6006)

さらに、参照 Dockerfile コマンドを更新して、選択したパッケージとアーティファクトを含めることができます。

  • 参照 Dockerfile を使用して Docker イメージを構築します。

docker build --network sagemaker --tag myflaskapp:v1 --file ./Dockerfile .

含める --network docker build コマンドに sagemaker を追加しないと、ビルドが失敗します。コンテナーは、Docker のデフォルト ブリッジまたはカスタム Docker ネットワークでは実行できません。コンテナは、SageMaker Studio アプリケーション コンテナと同じネットワーク内で実行されます。ユーザーはネットワーク名として sagemaker のみを使用できます。

  • ビルドが完了したら、イメージが存在するかどうかを確認します。ビルドを ECR イメージとして再タグ付けしてプッシュします。権限の問題が発生した場合は、aws ecr get-login-password… コマンドを実行し、Docker のプッシュ/プルを再実行してみてください。
sagemaker-user@default:~$ docker image list
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
myflaskapp      v1        d623f1538f20   27 minutes ago   489MB

sagemaker-user@default:~$ docker tag myflaskapp:v1 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

sagemaker-user@default:~$ docker image list
REPOSITORY                                                  TAG       IMAGE ID       CREATED          SIZE
123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp     latest    d623f1538f20   27 minutes ago   489MB
myflaskapp                                                  v1        d623f1538f20   27 minutes ago   489MB

sagemaker-user@default:~$ aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

sagemaker-user@default:~$ docker push 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:latest

Docker イメージのテスト

Docker を JupyterLab (またはコード エディター) SageMaker Studio スペース内にインストールすると、事前に構築されたまたはカスタムの Docker イメージをコンテナー (またはコンテナー化されたアプリケーション) としてテストできます。このセクションでは、docker run コマンドを使用して SageMaker Studio スペース内に Docker コンテナをプロビジョニングし、REST Web サービスや Python スクリプトなどのコンテナ化されたワークロードをテストします。次の手順を実行します。

sagemaker-user@default:~$ docker image list
REPOSITORY                                                  TAG       IMAGE ID       CREATED       SIZE

  • テスト イメージが存在しない場合は、 docker pull を実行してイメージをローカル マシンにプルします。

sagemaker-user@default:~$ docker pull 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

  • 認証の問題が発生した場合は、次のコマンドを実行します。

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

  • ワークロードをテストするためのコンテナーを作成します。

docker run --network sagemaker 123456789012.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1

これにより、新しいコンテナ インスタンスが起動され、Docker の ENTRYPOINT を使用して定義されたアプリケーションが実行されます。

sagemaker-user@default:~$ docker run --network sagemaker 905418447590.dkr.ecr.us-east-2.amazonaws.com/myflaskapp:v1
* Serving Flask app 'app'
* Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:6006
* Running on http://169.255.255.2:6006

  • Web エンドポイントがアクティブかどうかをテストするには、次の URL に移動します。 https://<sagemaker-space-id>.studio.us-east-2.sagemaker.aws/jupyterlab/default/proxy/6006/.

次のスクリーンショットのような JSON 応答が表示されるはずです。

Docker インストールをライフサイクル構成として構成する

クリーンアップ

不必要な料金が発生しないようにするには、この投稿の例の実行中に作成したリソースを削除してください。

  1. SageMaker Studio ドメインで、 スタジオクラシック ナビゲーションペインで、を選択します Force Stop.
  2. SageMaker Studio ドメインで、 ジュピターラボ or コードエディター ナビゲーションペインでアプリを選択し、 Force Stop.

まとめ

SageMaker Studio のローカル モードと Docker のサポートにより、開発者はワークスペースを離れることなく、ML 実装をより迅速に構築、テスト、反復できるようになります。これらの機能は、テスト環境と出力への即時アクセスを提供することで、ワークフローを最適化し、生産性を向上させます。 SageMaker Studio のローカル モデルと Docker のサポートを、 クイックオンボード機能、これにより、数分以内に単一ユーザー用の新しいドメインをスピンアップできます。 コメントセクションであなたの考えを共有してください!


著者について

シュエタシンシュエタシン は、AW​​S の Amazon SageMaker Machine Learning (ML) プラットフォーム チームのシニアプロダクトマネージャーであり、SageMaker Python SDK を主導しています。彼女は 5 年以上、Amazon でいくつかの製品の役割を果たしてきました。彼女はニューヨーク大学でコンピュータ エンジニアリングの理学士号と金融工学の理学修士号を取得しています。

エイタンセラエイタンセラ AWS のジェネレーティブ AI および機械学習スペシャリスト ソリューション アーキテクトです。彼は AWS の顧客と協力してガイダンスと技術支援を提供し、AWS での生成 AI および機械学習ソリューションの構築と運用を支援しています。余暇には、ジョギングをしたり、最新の機械学習の記事を読んだりするのが趣味です。

プラナフ・ムルティプラナフ・ムルティ AWS の AI/ML スペシャリスト ソリューション アーキテクトです。 彼は、顧客が機械学習 (ML) ワークロードを構築、トレーニング、デプロイし、SageMaker に移行できるよう支援することに重点を置いています。 以前は半導体業界で、最先端の ML 技術を使用して半導体プロセスを改善するための大規模コンピューター ビジョン (CV) および自然言語処理 (NLP) モデルの開発に従事していました。 自由時間には、チェスをしたり、旅行を楽しんでいます。 プラナフは次のサイトで見つけることができます LinkedIn.

ムファダル・ロハワラムファダル・ロハワラ AWS のソフトウェア エンジニアです。彼は、Amazon SageMaker の SageMaker Python SDK ライブラリに取り組んでいます。余暇には、旅行やアウトドア活動を楽しんでおり、サッカーファンでもあります。

スポット画像

最新のインテリジェンス

スポット画像

私たちとチャット

やあ! どんな御用でしょうか?