Організуйте робочі процеси машинного навчання на основі Ray за допомогою Amazon SageMaker | Веб-сервіси Amazon

Організуйте робочі процеси машинного навчання на основі Ray за допомогою Amazon SageMaker | Веб-сервіси Amazon

Машинне навчання (ML) стає дедалі складнішим, оскільки клієнти намагаються вирішувати все більш складні проблеми. Ця складність часто призводить до необхідності розподіленого машинного навчання, де кілька машин використовуються для навчання однієї моделі. Незважаючи на те, що це дозволяє розпаралелювати завдання на кількох вузлах, що призводить до прискореного часу навчання, покращеної масштабованості та покращеної продуктивності, ефективне використання розподіленого апаратного забезпечення пов’язане зі значними труднощами. Науковці даних мають вирішувати такі проблеми, як розподіл даних, балансування навантаження, відмовостійкість і масштабованість. Інженери ML повинні виконувати розпаралелювання, планування, помилки та повторні спроби вручну, що вимагає складного інфраструктурного коду.

У цій публікації ми обговорюємо переваги використання промінь та Amazon SageMaker для розподіленого ML, а також надати покроковий посібник щодо використання цих інфраструктур для створення та розгортання масштабованого робочого процесу ML.

Ray, структура розподіленого обчислення з відкритим кодом, забезпечує гнучку структуру для розподіленого навчання та обслуговування моделей ML. Він абстрагує низькорівневі деталі розподіленої системи за допомогою простих, масштабованих бібліотек для поширених завдань ML, таких як попередня обробка даних, розподілене навчання, налаштування гіперпараметрів, навчання з підкріпленням і обслуговування моделі.

SageMaker — це повністю керований сервіс для створення, навчання та розгортання моделей ML. Ray легко інтегрується з функціями SageMaker для створення та розгортання складних робочих навантажень ML, які є ефективними та надійними. Поєднання Ray і SageMaker надає наскрізні можливості для масштабованих робочих процесів машинного навчання та має наступні основні функції:

  • Розподілені актори та конструкції паралелізму в Ray спрощують розробку розподілених програм.
  • Ray AI Runtime (AIR) зменшує труднощі під час переходу від розробки до виробництва. За допомогою Ray і AIR той самий код Python можна легко масштабувати з ноутбука на великий кластер.
  • Керована інфраструктура SageMaker і такі функції, як завдання обробки, завдання навчання та завдання налаштування гіперпараметрів, можуть використовувати бібліотеки Ray для розподілених обчислень.
  • Експерименти Amazon SageMaker дозволяє швидко повторювати та відстежувати випробування.
  • Магазин функцій Amazon SageMaker забезпечує масштабований репозиторій для зберігання, отримання та спільного використання функцій ML для навчання моделі.
  • Навчені моделі можна зберігати, керувати версіями та відстежувати Реєстр моделей Amazon SageMaker для управління та менеджменту.
  • Трубопроводи Amazon SageMaker дозволяє організовувати наскрізний життєвий цикл машинного навчання від підготовки даних і навчання до моделювання розгортання як автоматизованих робочих процесів.

Огляд рішення

Ця публікація присвячена перевагам спільного використання Ray і SageMaker. Ми створили наскрізний робочий процес ML на основі Ray, організований за допомогою SageMaker Pipelines. Робочий процес включає паралельне введення даних у сховище функцій за допомогою акторів Ray, попередню обробку даних за допомогою Ray Data, навчання моделей і налаштування гіперпараметрів у масштабі за допомогою Ray Train і оптимізації гіперпараметрів (HPO), а також оцінку моделі та реєстрацію моделі в реєстр моделей.

Для наших даних ми використовуємо синтетичний набір даних про житло який складається з восьми функцій (YEAR_BUILT, SQUARE_FEET, NUM_BEDROOM, NUM_BATHROOMS, LOT_ACRES, GARAGE_SPACES, FRONT_PORCH та DECK) і наша модель передбачить PRICE будинку.

Кожен етап робочого процесу машинного навчання розбивається на окремі кроки з власним сценарієм, який приймає вхідні та вихідні параметри. У наступному розділі ми виділимо ключові фрагменти коду з кожного кроку. Повний код можна знайти на aws-samples-for-ray репозиторій GitHub.

Передумови

Щоб використовувати SageMaker Python SDK і запускати код, пов’язаний із цією публікацією, вам потрібні такі передумови:

Передайте дані в магазин функцій SageMaker

Першим кроком у робочому процесі ML є читання файлу вихідних даних Служба простого зберігання Amazon (Amazon S3) у форматі CSV і завантажте його в SageMaker Feature Store. SageMaker Feature Store — це спеціально створене сховище, яке спрощує команди створення, спільного використання та керування функціями машинного навчання. Це спрощує виявлення функцій, повторне використання та спільний доступ, що сприяє швидшій розробці, покращенню співпраці в командах клієнтів і зниженню витрат.

Передача функцій у сховище функцій містить такі кроки:

  1. Визначте групу функцій і створіть групу функцій у сховищі функцій.
  2. Підготуйте вихідні дані для сховища функцій, додавши час події та ідентифікатор запису для кожного рядка даних.
  3. Введіть підготовлені дані в групу функцій за допомогою Boto3 SDK.

У цьому розділі ми виділяємо лише крок 3, оскільки це частина, яка передбачає паралельну обробку завдання прийому за допомогою Ray. Ви можете переглянути повний код для цього процесу в GitHub репо.

Команда ingest_features Метод визначається всередині класу під назвою Featurestore. Зауважимо, що Featurestore клас прикрашений @ray.remote. Це вказує на те, що екземпляр цього класу є актором Ray, одночасним обчислювальним блоком із збереженням стану в Ray. Це модель програмування, яка дозволяє створювати розподілені об’єкти, які зберігають внутрішній стан і до яких можуть одночасно звертатися кілька завдань, що виконуються на різних вузлах у кластері Ray. Актори забезпечують спосіб керування та інкапсуляції змінного стану, що робить їх цінними для створення складних додатків із збереженням стану в розподіленому середовищі. Ви також можете вказати вимоги до ресурсів для акторів. У цьому випадку кожен екземпляр FeatureStore клас вимагатиме 0.5 ЦП. Перегляньте наступний код:

@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 Dataset для ефективного розділення, трансформації та масштабування нашого набору даних у рамках підготовки до машинного навчання. Ray Dataset забезпечує стандартний спосіб завантаження розподілених даних у Ray, підтримуючи різні системи зберігання та формати файлів. Він має API для звичайних операцій попередньої обробки даних ML, таких як паралельні перетворення, перетасування, групування та агрегації. Ray Dataset також обробляє операції, які потребують налаштування стану та прискорення GPU. Він легко інтегрується з іншими бібліотеками обробки даних, такими як Spark, Pandas, NumPy тощо, а також із фреймворками ML, такими як TensorFlow і PyTorch. Це дозволяє створювати наскрізні конвеєри даних і робочі процеси машинного навчання поверх Ray. Мета полягає в тому, щоб полегшити розподілену обробку даних і 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 і налаштувати їх гіперпараметри, щоб максимізувати ефективність прогнозування. Ми використовуємо XGBoost-Ray, розподілений бекенд для XGBoost, побудований на Ray, який дозволяє навчати моделі XGBoost на великих наборах даних за допомогою кількох вузлів і графічних процесорів. Він забезпечує прості заміни програмного забезпечення XGBoost і передбачуваних API, одночасно впораючись зі складнощами управління розподіленими даними та навчання під капотом.

Щоб забезпечити розподіл навчання на кількох вузлах, ми використовуємо допоміжний клас під назвою RayHelper. Як показано в наступному коді, ми використовуємо конфігурацію ресурсу навчального завдання та вибираємо перший хост як головний вузол:

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 від XGBoost-Ray для навчання:

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, яка бере кількість акторів і кількість ЦП на актора. XGBoost-Ray використовує цю інформацію для розподілу навчання між усіма вузлами, приєднаними до кластера Ray.

Тепер ми створюємо об’єкт оцінки XGBoost на основі SDK SageMaker Python і використовуємо його для завдання HPO.

Організуйте попередні кроки за допомогою SageMaker Pipelines

Щоб побудувати наскрізний масштабований і багаторазово використовуваний робочий процес машинного навчання, нам потрібно використовувати інструмент CI/CD, щоб оркеструвати попередні кроки в конвеєр. SageMaker Pipelines має пряму інтеграцію з SageMaker, SDK SageMaker Python і SageMaker Studio. Ця інтеграція дозволяє створювати робочі процеси ML за допомогою простого у використанні Python SDK, а потім візуалізувати робочий процес і керувати ним за допомогою SageMaker Studio. Ви також можете відстежувати історію ваших даних під час виконання конвеєра та призначати кроки для кешування.

SageMaker Pipelines створює спрямований ациклічний графік (DAG), який включає кроки, необхідні для побудови робочого циклу машинного навчання. Кожен конвеєр — це серія взаємопов’язаних кроків, організованих залежностями даних між кроками, і їх можна параметризувати, що дозволяє надавати вхідні змінні як параметри для кожного циклу конвеєра. SageMaker Pipelines має чотири типи параметрів конвеєра: 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")

Ми визначаємо два етапи обробки: один для прийому SageMaker Feature Store, інший для підготовки даних. Це має виглядати дуже схоже на попередні кроки, описані раніше. Єдиним новим рядком коду є 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],
)

Визначимо a ModelStep щоб зареєструвати найкращу модель у нашому реєстрі моделей SageMaker. Якщо найкраща модель не проходить нашу перевірку якості, ми додатково вказуємо a 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]),
)

Далі ми використовуємо a 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 Pipeline 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:

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 Видалити кінцеву точку, DeleteModelPackageGroup, DeletePipeline та DeleteFeatureGroup, відповідно, і вимкніть усі екземпляри блокнотів SageMaker Studio.

Висновок

Ця публікація продемонструвала покрокову інструкцію щодо використання SageMaker Pipelines для організації робочих процесів ML на основі Ray. Ми також продемонстрували здатність SageMaker Pipelines інтегруватися зі сторонніми інструментами машинного навчання. Існують різноманітні сервіси AWS, які підтримують робочі навантаження Ray у масштабований та безпечний спосіб для забезпечення високої продуктивності та ефективності роботи. Тепер ваша черга дослідити ці потужні можливості та почати оптимізувати робочі процеси машинного навчання за допомогою Amazon SageMaker Pipelines і Ray. Дійте сьогодні та розкрийте весь потенціал своїх проектів ML!


Про автора

Керуйте робочими процесами машинного навчання на основі Ray за допомогою Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Раджу Ранган є старшим архітектором рішень в Amazon Web Services (AWS). Він працює з державними організаціями, допомагаючи їм створювати рішення AI/ML за допомогою AWS. Якщо ви не будете працювати з хмарними рішеннями, ви побачите його, коли він тусується з родиною або розбиває пташок у жвавій грі в бадмінтон з друзями.

Керуйте робочими процесами машинного навчання на основі Ray за допомогою Amazon SageMaker | Amazon Web Services PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.Шеррі Дін є старшим архітектором рішень спеціаліста зі штучного інтелекту/ML в Amazon Web Services (AWS). Вона має великий досвід машинного навчання зі ступенем доктора філософії з інформатики. В основному вона працює з клієнтами державного сектору над різними бізнес-завданнями, пов’язаними зі штучним інтелектом/ML, допомагаючи їм прискорити процес машинного навчання в AWS Cloud. Коли вона не допомагає клієнтам, вона любить активний відпочинок.

Часова мітка:

Більше від AWS Машинне навчання