Amazon SageMaker を使用して Ray ベースの機械学習ワークフローを調整する | アマゾン ウェブ サービス

Amazon SageMaker を使用して Ray ベースの機械学習ワークフローを調整する | アマゾン ウェブ サービス

顧客がますます困難な問題を解決しようとするにつれて、機械学習 (ML) はますます複雑になっています。 この複雑さにより、多くの場合、複数のマシンを使用して単一のモデルをトレーニングする分散 ML が必要になります。 これにより、複数のノードにわたるタスクの並列化が可能になり、トレーニング時間の短縮、スケーラビリティの向上、パフォーマンスの向上につながりますが、分散ハードウェアを効果的に使用するには大きな課題があります。 データ サイエンティストは、データのパーティショニング、ロード バランシング、フォールト トレランス、スケーラビリティなどの課題に対処する必要があります。 ML エンジニアは、並列化、スケジューリング、障害、再試行を手動で処理する必要があり、複雑なインフラストラクチャ コードが必要になります。

この記事では、使用するメリットについて説明します。 レイ および アマゾンセージメーカー 分散 ML 向けに、これらのフレームワークを使用してスケーラブルな ML ワークフローを構築およびデプロイする方法に関するステップバイステップのガイドを提供します。

オープンソースの分散コンピューティング フレームワークである Ray は、分散トレーニングと ML モデルの提供のための柔軟なフレームワークを提供します。 データ前処理、分散トレーニング、ハイパーパラメータ調整、強化学習、モデル提供などの一般的な ML タスク用のシンプルでスケーラブルなライブラリを通じて、低レベルの分散システムの詳細を抽象化します。

SageMaker は、ML モデルの構築、トレーニング、デプロイを行うためのフルマネージド サービスです。 Ray は SageMaker の機能とシームレスに統合し、効率的で信頼性の高い複雑な ML ワークロードを構築およびデプロイします。 Ray と SageMaker を組み合わせると、スケーラブルな ML ワークフローにエンドツーエンドの機能が提供され、次の注目すべき機能があります。

  • Ray の分散アクターと並列処理構造により、分散アプリケーションの開発が簡素化されます。
  • Ray AI Runtime (AIR) は、開発から本番環境に移行する際の負担を軽減します。 Ray と AIR を使用すると、同じ Python コードをラップトップから大規模なクラスターまでシームレスに拡張できます。
  • SageMaker のマネージド インフラストラクチャと、処理ジョブ、トレーニング ジョブ、ハイパーパラメータ調整ジョブなどの機能は、分散コンピューティングのためにその下にある Ray ライブラリを使用できます。
  • AmazonSageMakerの実験 迅速な反復とトライアルの追跡が可能になります。
  • Amazon SageMaker フィーチャーストア モデルトレーニング用の ML 機能を保存、取得、共有するためのスケーラブルなリポジトリを提供します。
  • トレーニングされたモデルは、次の場所に保存、バージョン管理、追跡できます。 Amazon SageMaker モデルレジストリ ガバナンスとマネジメントのために。
  • AmazonSageMakerパイプライン データの準備とトレーニングからモデルのデプロイメントまで、自動化されたワークフローとしてエンドツーエンドの ML ライフサイクルを調整できます。

ソリューションの概要

この投稿では、Ray と SageMaker を併用する利点に焦点を当てます。 SageMaker Pipelines を使用して調整された、エンドツーエンドの Ray ベースの ML ワークフローをセットアップしました。 ワークフローには、Ray アクターを使用したフィーチャ ストアへのデータの並列取り込み、Ray Data によるデータの前処理、Ray Train とハイパーパラメータ最適化 (HPO) 調整ジョブを使用した大規模なモデルのトレーニングとハイパーパラメータ調整、そして最後にモデルの評価とモデルの登録が含まれます。モデルレジストリ。

データとしては、 合成住宅データセット XNUMX つの機能 (YEAR_BUILT, SQUARE_FEET, NUM_BEDROOM, NUM_BATHROOMS, LOT_ACRES, GARAGE_SPACES, FRONT_PORCH, DECK) そして私たちのモデルは PRICE 家の。

ML ワークフローの各ステージは、入力パラメーターと出力パラメーターを受け取る独自のスクリプトを備えた個別のステップに分割されます。 次のセクションでは、各ステップの主要なコード スニペットを強調表示します。 完全なコードは次の場所にあります。 aws-samples-for-ray GitHub リポジトリ.

前提条件

SageMaker Python SDK を使用してこの投稿に関連付けられたコードを実行するには、次の前提条件が必要です。

SageMaker Feature Store へのデータの取り込み

ML ワークフローの最初のステップは、ソース データ ファイルを読み取ることです。 Amazon シンプル ストレージ サービス (Amazon S3) を CSV 形式で保存し、SageMaker Feature Store に取り込みます。 SageMaker Feature Store は、チームが ML 機能を簡単に作成、共有、管理できるようにする専用のリポジトリです。 これにより、機能の発見、再利用、共有が簡素化され、開発の迅速化、顧客チーム内のコラボレーションの強化、コストの削減につながります。

機能ストアへの機能の取り込みには、次の手順が含まれます。

  1. 機能グループを定義し、機能ストアに機能グループを作成します。
  2. データの各行にイベント時刻とレコード ID を追加して、フィーチャ ストアのソース データを準備します。
  3. Boto3 SDK を使用して、準備されたデータを機能グループに取り込みます。

このセクションでは、ステップ 3 のみを強調表示します。これは、Ray を使用した取り込みタスクの並列処理に関係する部分であるためです。 このプロセスの完全なコードは、次の場所で確認できます。 GitHubレポ.

  取り込み_機能 メソッドはクラス内で定義されています。 Featurestore。 なお、 Featurestore クラスに飾られているのは @ray.remote。 これは、このクラスのインスタンスが Ray アクター、つまり Ray 内のステートフルな同時計算ユニットであることを示します。 これは、内部状態を維持し、Ray クラスター内の異なるノードで実行されている複数のタスクから同時にアクセスできる分散オブジェクトを作成できるようにするプログラミング モデルです。 アクターは、可変状態を管理およびカプセル化する方法を提供するため、分散設定で複雑でステートフルなアプリケーションを構築する場合に役立ちます。 アクターでリソース要件を指定することもできます。 この場合、 FeatureStore クラスには 0.5 CPU が必要です。 次のコードを参照してください。

@ray.remote(num_cpus=0.5)
class Featurestore: def ingest_features(self,feature_group_name, df, region): """ Ingest features to Feature Store Group Args: feature_group_name (str): Feature Group Name data_path (str): Path to the train/validation/test data in CSV format. """ ...

を呼び出すことでアクターと対話できます。 remote オペレーター。 次のコードでは、必要な数のアクターが入力引数としてスクリプトに渡されます。 次に、データはアクターの数に基づいて分割され、リモートの並列プロセスに渡されて、特徴ストアに取り込まれます。 電話することができます get オブジェクト ref に対して、リモート計算が完了して結果が利用可能になるまで、現在のタスクの実行をブロックします。 結果が出たら、 ray.get 結果が返され、現在のタスクの実行が続行されます。

import modin.pandas as pd
import ray df = pd.read_csv(s3_path)
data = prepare_df_for_feature_store(df)
# Split into partitions
partitions = [ray.put(part) for part in np.array_split(data, num_actors)]
# Start actors and assign partitions in a loop
actors = [Featurestore.remote() for _ in range(args.num_actors)]
results = [] for actor, partition in zip(actors, input_partitions): results.append(actor.ingest_features.remote( args.feature_group_name, partition, args.region ) ) ray.get(results)

トレーニング、検証、テスト用のデータを準備する

このステップでは、Ray データセットを使用して、機械学習の準備としてデータセットを効率的に分割、変換、スケールします。 Ray Dataset は、分散データを Ray にロードする標準的な方法を提供し、さまざまなストレージ システムとファイル形式をサポートします。 並列変換、シャッフル、グループ化、集計などの一般的な ML データ前処理操作用の API を備えています。 Ray Dataset は、ステートフル セットアップと GPU アクセラレーションを必要とする操作も処理します。 Spark、Pandas、NumPy などの他のデータ処理ライブラリや、TensorFlow や PyTorch などの ML フレームワークとスムーズに統合します。 これにより、Ray 上にエンドツーエンドのデータ パイプラインと ML ワークフローを構築できるようになります。 目標は、分散データ処理と ML を実務者や研究者にとって容易にすることです。

このデータ前処理を実行するスクリプトのセクションを見てみましょう。 まず、フィーチャ ストアからデータをロードします。

def load_dataset(feature_group_name, region): """ Loads the data as a ray dataset from the offline featurestore S3 location Args: feature_group_name (str): name of the feature group Returns: ds (ray.data.dataset): Ray dataset the contains the requested dat from the feature store """ session = sagemaker.Session(boto3.Session(region_name=region)) fs_group = FeatureGroup( name=feature_group_name, sagemaker_session=session ) fs_data_loc = fs_group.describe().get("OfflineStoreConfig").get("S3StorageConfig").get("ResolvedOutputS3Uri") # Drop columns added by the feature store # Since these are not related to the ML problem at hand cols_to_drop = ["record_id", "event_time","write_time", "api_invocation_time", "is_deleted", "year", "month", "day", "hour"] ds = ray.data.read_parquet(fs_data_loc) ds = ds.drop_columns(cols_to_drop) print(f"{fs_data_loc} count is {ds.count()}") return ds

次に、 ray.data としょうかん:

def split_dataset(dataset, train_size, val_size, test_size, random_state=None): """ Split dataset into train, validation and test samples Args: dataset (ray.data.Dataset): input data train_size (float): ratio of data to use as training dataset val_size (float): ratio of data to use as validation dataset test_size (float): ratio of data to use as test dataset random_state (int): Pass an int for reproducible output across multiple function calls. Returns: train_set (ray.data.Dataset): train dataset val_set (ray.data.Dataset): validation dataset test_set (ray.data.Dataset): test dataset """ # Shuffle this dataset with a fixed random seed. shuffled_ds = dataset.random_shuffle(seed=random_state) # Split the data into train, validation and test datasets train_set, val_set, test_set = shuffled_ds.split_proportionately([train_size, val_size]) return train_set, val_set, test_set def scale_dataset(train_set, val_set, test_set, target_col): """ Fit StandardScaler to train_set and apply it to val_set and test_set Args: train_set (ray.data.Dataset): train dataset val_set (ray.data.Dataset): validation dataset test_set (ray.data.Dataset): test dataset target_col (str): target col Returns: train_transformed (ray.data.Dataset): train data scaled val_transformed (ray.data.Dataset): val data scaled test_transformed (ray.data.Dataset): test data scaled """ tranform_cols = dataset.columns() # Remove the target columns from being scaled tranform_cols.remove(target_col) # set up a standard scaler standard_scaler = StandardScaler(tranform_cols) # fit scaler to training dataset print("Fitting scaling to training data and transforming dataset...") train_set_transformed = standard_scaler.fit_transform(train_set) # apply scaler to validation and test datasets print("Transforming validation and test datasets...") val_set_transformed = standard_scaler.transform(val_set) test_set_transformed = standard_scaler.transform(test_set) return train_set_transformed, val_set_transformed, test_set_transformed

処理されたトレイン、検証、テストのデータセットは Amazon S3 に保存され、入力パラメーターとして後続のステップに渡されます。

モデルのトレーニングとハイパーパラメーターの最適化を実行する

データが前処理され、モデリングの準備ができたら、いくつかの ML モデルをトレーニングし、そのハイパーパラメーターを微調整して、予測パフォーマンスを最大化します。 を使用しております XGブーストレイは、Ray 上に構築された XGBoost の分散バックエンドで、複数のノードと GPU を使用して大規模なデータセットで XGBoost モデルをトレーニングできるようにします。 これは、分散データ管理と内部トレーニングの複雑さを処理しながら、XGBoost のトレーニング API と予測 API のシンプルなドロップイン代替機能を提供します。

複数のノードにわたるトレーニングの分散を可能にするために、という名前のヘルパー クラスを利用します。 レイヘルパー。 次のコードに示すように、トレーニング ジョブのリソース構成を使用し、最初のホストをヘッド ノードとして選択します。

class RayHelper(): def __init__(self, ray_port:str="9339", redis_pass:str="redis_password"): .... self.resource_config = self.get_resource_config() self.head_host = self.resource_config["hosts"][0] self.n_hosts = len(self.resource_config["hosts"])

ホスト情報を使用して、各トレーニング ジョブ インスタンスで Ray を初期化する方法を決定できます。

def start_ray(self): head_ip = self._get_ip_from_host() # If the current host is the host choosen as the head node # run `ray start` with specifying the --head flag making this is the head node if self.resource_config["current_host"] == self.head_host: output = subprocess.run(['ray', 'start', '--head', '-vvv', '--port', self.ray_port, '--redis-password', self.redis_pass, '--include-dashboard', 'false'], stdout=subprocess.PIPE) print(output.stdout.decode("utf-8")) ray.init(address="auto", include_dashboard=False) self._wait_for_workers() print("All workers present and accounted for") print(ray.cluster_resources()) else: # If the current host is not the head node, # run `ray start` with specifying ip address as the head_host as the head node time.sleep(10) output = subprocess.run(['ray', 'start', f"--address={head_ip}:{self.ray_port}", '--redis-password', self.redis_pass, "--block"], stdout=subprocess.PIPE) print(output.stdout.decode("utf-8")) sys.exit(0)

トレーニング ジョブが開始されると、Ray クラスターは、 start_ray() のインスタンスのメソッド RayHelper:

if __name__ == '__main__': ray_helper = RayHelper() ray_helper.start_ray() args = read_parameters() sess = sagemaker.Session(boto3.Session(region_name=args.region))

次に、XGBoost-Ray の XGBoost トレーナーをトレーニングに使用します。

def train_xgboost(ds_train, ds_val, params, num_workers, target_col = "price") -> Result: """ Creates a XGBoost trainer, train it, and return the result. Args: ds_train (ray.data.dataset): Training dataset ds_val (ray.data.dataset): Validation dataset params (dict): Hyperparameters num_workers (int): number of workers to distribute the training across target_col (str): target column Returns: result (ray.air.result.Result): Result of the training job """ train_set = RayDMatrix(ds_train, 'PRICE') val_set = RayDMatrix(ds_val, 'PRICE') evals_result = {} trainer = train( params=params, dtrain=train_set, evals_result=evals_result, evals=[(val_set, "validation")], verbose_eval=False, num_boost_round=100, ray_params=RayParams(num_actors=num_workers, cpus_per_actor=1), ) output_path=os.path.join(args.model_dir, 'model.xgb') trainer.save_model(output_path) valMAE = evals_result["validation"]["mae"][-1] valRMSE = evals_result["validation"]["rmse"][-1] print('[3] #011validation-mae:{}'.format(valMAE)) print('[4] #011validation-rmse:{}'.format(valRMSE)) local_testing = False try: load_run(sagemaker_session=sess) except: local_testing = True if not local_testing: # Track experiment if using SageMaker Training with load_run(sagemaker_session=sess) as run: run.log_metric('validation-mae', valMAE) run.log_metric('validation-rmse', valRMSE)

インスタンス化する際に注意してください。 trainer、合格します RayParams、アクターの数とアクターごとの CPU の数を取得します。 XGBoost-Ray はこの情報を使用して、Ray クラスターに接続されているすべてのノードにトレーニングを分散します。

ここで、SageMaker Python SDK に基づいて XGBoost 推定オブジェクトを作成し、それを HPO ジョブに使用します。

SageMaker Pipelines を使用して前述の手順を調整します。

エンドツーエンドのスケーラブルで再利用可能な ML ワークフローを構築するには、CI/CD ツールを使用して前述のステップをパイプラインに統合する必要があります。 SageMaker Pipelines は、SageMaker、SageMaker Python SDK、および SageMaker Studio と直接統合されています。 この統合により、使いやすい Python SDK で ML ワークフローを作成し、SageMaker Studio を使用してワークフローを視覚化して管理できるようになります。 パイプライン実行内のデータの履歴を追跡し、キャッシュのステップを指定することもできます。

SageMaker Pipelines は、ML ワークフローの構築に必要なステップを含む有向非巡回グラフ (DAG) を作成します。 各パイプラインは、ステップ間のデータ依存関係によって調整された一連の相互接続されたステップであり、パラメーター化できるため、パイプラインの実行ごとに入力変数をパラメーターとして指定できます。 SageMaker Pipelines には XNUMX 種類のパイプライン パラメーターがあります。 ParameterString, ParameterInteger, ParameterFloat, ParameterBoolean。 このセクションでは、いくつかの入力変数をパラメータ化し、ステップ キャッシュ構成をセットアップします。

processing_instance_count = ParameterInteger( name='ProcessingInstanceCount', default_value=1
)
feature_group_name = ParameterString( name='FeatureGroupName', default_value='fs-ray-synthetic-housing-data'
)
bucket_prefix = ParameterString( name='Bucket_Prefix', default_value='aws-ray-mlops-workshop/feature-store'
)
rmse_threshold = ParameterFloat(name="RMSEThreshold", default_value=15000.0) train_size = ParameterString( name='TrainSize', default_value="0.6"
)
val_size = ParameterString( name='ValidationSize', default_value="0.2"
)
test_size = ParameterString( name='TestSize', default_value="0.2"
) cache_config = CacheConfig(enable_caching=True, expire_after="PT12H")

XNUMX つの処理ステップを定義します。XNUMX つは SageMaker Feature Store の取り込み用、もう XNUMX つはデータ準備用です。 これは、前述した前の手順と非常に似ているはずです。 コードの唯一の新しい行は、 ProcessingStep これにより、処理ジョブ構成を取得し、それをパイプライン ステップとして含めることができます。 さらに、SageMaker Feature Store 取り込みステップに対するデータ準備ステップの依存関係を指定します。 次のコードを参照してください。

feature_store_ingestion_step = ProcessingStep( name='FeatureStoreIngestion', step_args=fs_processor_args, cache_config=cache_config
) preprocess_dataset_step = ProcessingStep( name='PreprocessData', step_args=processor_args, cache_config=cache_config
)
preprocess_dataset_step.add_depends_on([feature_store_ingestion_step])

同様に、モデルのトレーニングと調整のステップを構築するには、次の定義を追加する必要があります。 TuningStep モデルトレーニングステップのコードの後に​​、SageMaker ハイパーパラメータ調整をパイプラインのステップとして実行できるようにします。

tuning_step = TuningStep( name="HPTuning", tuner=tuner, inputs={ "train": TrainingInput( s3_data=preprocess_dataset_step.properties.ProcessingOutputConfig.Outputs[ "train" ].S3Output.S3Uri, content_type="text/csv" ), "validation": TrainingInput( s3_data=preprocess_dataset_step.properties.ProcessingOutputConfig.Outputs[ "validation" ].S3Output.S3Uri, content_type="text/csv" ) }, cache_config=cache_config,
)
tuning_step.add_depends_on([preprocess_dataset_step])

調整ステップの後、最適なモデルを SageMaker モデル レジストリに登録することを選択します。 モデルの品質を制御するために、最良のモデルの目標メトリック (RMSE) をパイプラインの入力パラメーターとして定義されたしきい値と比較する最小品質ゲートを実装します。 rmse_threshold。 この評価を行うために、別の処理ステップを作成して 評価スクリプト。 モデルの評価結果はプロパティファイルとして保存されます。 プロパティ ファイルは、処理ステップの結果を分析して他のステップをどのように実行するかを決定する場合に特に役立ちます。 次のコードを参照してください。

# Specify where we'll store the model evaluation results so that other steps can access those results
evaluation_report = PropertyFile( name='EvaluationReport', output_name='evaluation', path='evaluation.json',
) # A ProcessingStep is used to evaluate the performance of a selected model from the HPO step. # In this case, the top performing model is evaluated. evaluation_step = ProcessingStep( name='EvaluateModel', processor=evaluation_processor, inputs=[ ProcessingInput( source=tuning_step.get_top_model_s3_uri( top_k=0, s3_bucket=bucket, prefix=s3_prefix ), destination='/opt/ml/processing/model', ), ProcessingInput( source=preprocess_dataset_step.properties.ProcessingOutputConfig.Outputs['test'].S3Output.S3Uri, destination='/opt/ml/processing/test', ), ], outputs=[ ProcessingOutput( output_name='evaluation', source='/opt/ml/processing/evaluation' ), ], code='./pipeline_scripts/evaluate/script.py', property_files=[evaluation_report],
)

を定義します。 ModelStep パイプラインの SageMaker Model Registry に最適なモデルを登録します。 最良のモデルが所定の品質チェックに合格しなかった場合、追加で指定します。 FailStep エラーメッセージを出力するには:

register_step = ModelStep( name='RegisterTrainedModel', step_args=model_registry_args
) metrics_fail_step = FailStep( name="RMSEFail", error_message=Join(on=" ", values=["Execution failed due to RMSE >", rmse_threshold]),
)

次に、 ConditionStep パイプラインで次にモデル登録ステップまたは失敗ステップを実行する必要があるかどうかを評価します。 この例では、RMSE スコアがしきい値よりも低い場合に最適なモデルが登録されます。

# Condition step for evaluating model quality and branching execution
cond_lte = ConditionLessThanOrEqualTo( left=JsonGet( step_name=evaluation_step.name, property_file=evaluation_report, json_path='regression_metrics.rmse.value', ), right=rmse_threshold,
)
condition_step = ConditionStep( name='CheckEvaluation', conditions=[cond_lte], if_steps=[register_step], else_steps=[metrics_fail_step],
)

最後に、定義されたすべてのステップをパイプラインに統合します。

pipeline_name = 'synthetic-housing-training-sm-pipeline-ray'
step_list = [ feature_store_ingestion_step, preprocess_dataset_step, tuning_step, evaluation_step, condition_step ] training_pipeline = Pipeline( name=pipeline_name, parameters=[ processing_instance_count, feature_group_name, train_size, val_size, test_size, bucket_prefix, rmse_threshold ], steps=step_list
) # Note: If an existing pipeline has the same name it will be overwritten.
training_pipeline.upsert(role_arn=role_arn)

前述のパイプラインは、SageMaker Studio で直接視覚化して実行することも、呼び出しによって実行することもできます。 execution = training_pipeline.start()。 次の図はパイプライン フローを示しています。

SageMaker パイプライン DAG

さらに、パイプラインの実行によって生成されたアーティファクトの系統を確認できます。

from sagemaker.lineage.visualizer import LineageTableVisualizer viz = LineageTableVisualizer(sagemaker.session.Session())
for execution_step in reversed(execution.list_steps()): print(execution_step) display(viz.show(pipeline_execution_step=execution_step)) time.sleep(5)

モデルを展開する

パイプライン実行を通じて最適なモデルが SageMaker モデル レジストリに登録された後、SageMaker のフルマネージド モデル デプロイメント機能を使用して、モデルをリアルタイム エンドポイントにデプロイします。 SageMaker には、さまざまなユースケースのニーズを満たす他のモデル展開オプションがあります。 詳細については、を参照してください。 推論用のモデルをデプロイする ユースケースに適したオプションを選択するとき。 まず、SageMaker Model Registry に登録されたモデルを取得しましょう。

xgb_regressor_model = ModelPackage( role_arn, model_package_arn=model_package_arn, name=model_name
)

モデルの現在のステータスは、 PendingApproval。 そのステータスを次のように設定する必要があります Approved 導入前:

sagemaker_client.update_model_package( ModelPackageArn=xgb_regressor_model.model_package_arn, ModelApprovalStatus='Approved'
) xgb_regressor_model.deploy( initial_instance_count=1, instance_type='ml.m5.xlarge', endpoint_name=endpoint_name
)

クリーンアップ

実験が終了したら、不必要な料金が発生しないようにリソースをクリーンアップすることを忘れないでください。 クリーンアップするには、API を呼び出してリアルタイム エンドポイント、モデル グループ、パイプライン、および機能グループを削除します。 エンドポイントの削除, モデルパッケージグループの削除, パイプラインの削除, フィーチャーグループの削除をそれぞれ実行し、すべての SageMaker Studio ノートブック インスタンスをシャットダウンします。

まとめ

この投稿では、SageMaker Pipelines を使用して Ray ベースの ML ワークフローを調整する方法を段階的に説明しました。 また、サードパーティの ML ツールと統合する SageMaker Pipelines の機能も実証しました。 優れたパフォーマンスと運用効率を確保するために、スケーラブルかつ安全な方法で Ray ワークロードをサポートするさまざまな AWS サービスがあります。 次は、これらの強力な機能を探索し、Amazon SageMaker Pipelines と Ray を使用して機械学習ワークフローの最適化を開始する番です。 今すぐ行動を起こして、ML プロジェクトの可能性を最大限に引き出してください。


著者について

Amazon SageMaker を使用して Ray ベースの機械学習ワークフローを調整する |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。ラジュ・ランガン アマゾン ウェブ サービス (AWS) のシニア ソリューション アーキテクトです。 彼は政府支援団体と協力し、AWS を使用した AI/ML ソリューションの構築を支援しています。 クラウド ソリューションをいじっていないときは、家族と遊んだり、友人とバドミントンの活発なゲームでバーディを決めたりしている姿が目に入るでしょう。

Amazon SageMaker を使用して Ray ベースの機械学習ワークフローを調整する |アマゾン ウェブ サービス PlatoBlockchain データ インテリジェンス。垂直検索。あい。シェリー・ディン アマゾン ウェブ サービス (AWS) のシニア AI/ML スペシャリスト ソリューション アーキテクトです。 彼女は機械学習に関して豊富な経験を持ち、コンピューター サイエンスの博士号を取得しています。 彼女は主に公共部門の顧客と協力して AI/ML 関連のさまざまなビジネス課題に取り組み、AWS クラウドでの機械学習の取り組みを加速できるよう支援しています。 顧客をサポートしていないときは、屋外アクティビティを楽しんでいます。

タイムスタンプ:

より多くの AWS機械学習