Amazon SageMaker'ı kullanarak Ray tabanlı makine öğrenimi iş akışlarını düzenleyin | Amazon Web Hizmetleri

Amazon SageMaker'ı kullanarak Ray tabanlı makine öğrenimi iş akışlarını düzenleyin | Amazon Web Hizmetleri

Müşteriler giderek daha zorlu sorunları çözmeye çalıştıkça makine öğrenimi (ML) giderek daha karmaşık hale geliyor. Bu karmaşıklık genellikle tek bir modeli eğitmek için birden fazla makinenin kullanıldığı dağıtılmış makine öğrenimi ihtiyacına yol açar. Bu, birden fazla düğümde görevlerin paralelleştirilmesine olanak tanıyarak eğitim sürelerinin artmasına, ölçeklenebilirliğin artmasına ve performansın artmasına yol açsa da, dağıtılmış donanımın etkili bir şekilde kullanılmasında önemli zorluklar vardır. Veri bilimcileri, veri bölümleme, yük dengeleme, hata toleransı ve ölçeklenebilirlik gibi zorlukların üstesinden gelmek zorundadır. ML mühendisleri, karmaşık altyapı kodu gerektiren paralelleştirme, planlama, hatalar ve yeniden deneme işlemlerini manuel olarak gerçekleştirmelidir.

Bu yazıda, kullanmanın faydalarını tartışıyoruz. ışın ve Amazon Adaçayı Yapıcı dağıtılmış ML için ve ölçeklenebilir bir ML iş akışı oluşturmak ve dağıtmak için bu çerçevelerin nasıl kullanılacağına ilişkin adım adım bir kılavuz sağlayın.

Açık kaynaklı bir dağıtılmış bilgi işlem çerçevesi olan Ray, dağıtılmış eğitim ve makine öğrenimi modellerinin sunulması için esnek bir çerçeve sağlar. Veri ön işleme, dağıtılmış eğitim, hiper parametre ayarlama, pekiştirmeli öğrenme ve model sunma gibi yaygın makine öğrenimi görevleri için basit, ölçeklenebilir kitaplıklar aracılığıyla düşük düzeyli dağıtılmış sistem ayrıntılarını soyutlar.

SageMaker, ML modellerini oluşturmaya, eğitmeye ve dağıtmaya yönelik tam olarak yönetilen bir hizmettir. Ray, hem verimli hem de güvenilir olan karmaşık makine öğrenimi iş yüklerini oluşturmak ve dağıtmak için SageMaker özellikleriyle sorunsuz bir şekilde bütünleşir. Ray ve SageMaker'ın birleşimi, ölçeklenebilir makine öğrenimi iş akışları için uçtan uca yetenekler sağlar ve aşağıdaki öne çıkan özelliklere sahiptir:

  • Ray'deki dağıtılmış aktörler ve paralellik yapıları, dağıtılmış uygulamaların geliştirilmesini basitleştirir.
  • Ray AI Runtime (AIR), geliştirmeden üretime geçişteki zorlukları azaltır. Ray ve AIR ile aynı Python kodu bir dizüstü bilgisayardan büyük bir kümeye sorunsuz bir şekilde ölçeklenebilir.
  • SageMaker'ın yönetilen altyapısı ve işleme işleri, eğitim işleri ve hiperparametre ayarlama işleri gibi özellikler, dağıtılmış bilgi işlem için alttaki Ray kitaplıklarını kullanabilir.
  • Amazon SageMaker Deneyleri Denemelerin hızla yinelenmesine ve takip edilmesine olanak tanır.
  • Amazon SageMaker Özellik Mağazası model eğitimi için ML özelliklerinin depolanması, alınması ve paylaşılması için ölçeklenebilir bir depo sağlar.
  • Eğitilen modeller depolanabilir, versiyonları oluşturulabilir ve takip edilebilir Amazon SageMaker Model Kaydı Yönetişim ve yönetim için.
  • Amazon SageMaker Ardışık Düzenleri veri hazırlama ve eğitimden model dağıtımına kadar uçtan uca makine öğrenimi yaşam döngüsünün otomatik iş akışları olarak düzenlenmesine olanak tanır.

Çözüme genel bakış

Bu yazı Ray ve SageMaker'ı birlikte kullanmanın yararlarına odaklanıyor. SageMaker Pipelines kullanılarak düzenlenen uçtan uca Ray tabanlı bir makine öğrenimi iş akışı kurduk. İş akışı, Ray aktörleri kullanılarak verilerin özellik deposuna paralel alımını, Ray Data ile veri ön işlemeyi, Ray Train ve hiperparametre optimizasyonu (HPO) ayarlama işlerini kullanarak modelleri eğitme ve uygun ölçekte hiperparametre ayarlamayı ve son olarak model değerlendirmesi ve modelin bir modele kaydedilmesini içerir. modeli kayıt defteri.

Verilerimiz için şunu kullanıyoruz: sentetik konut veri seti sekiz özellikten oluşur (YEAR_BUILT, SQUARE_FEET, NUM_BEDROOM, NUM_BATHROOMS, LOT_ACRES, GARAGE_SPACES, FRONT_PORCH, ve DECK) ve modelimiz şunu tahmin edecek: PRICE evin.

ML iş akışındaki her aşama, giriş ve çıkış parametrelerini alan kendi komut dosyasıyla ayrı adımlara bölünmüştür. Bir sonraki bölümde her adımdaki anahtar kod parçacıklarını vurgulayacağız. Kodun tamamını şurada bulabilirsiniz: aws-for-ray GitHub deposu.

Önkoşullar

SageMaker Python SDK'yı kullanmak ve bu gönderiyle ilişkili kodu çalıştırmak için aşağıdaki önkoşullara ihtiyacınız vardır:

Verileri SageMaker Özellik Mağazasına aktarın

ML iş akışındaki ilk adım kaynak veri dosyasını okumaktır. Amazon Basit Depolama Hizmeti (Amazon S3) CSV formatında indirip SageMaker Özellik Mağazasına aktarın. SageMaker Özellik Mağazası, ekiplerin makine öğrenimi özelliklerini oluşturmasını, paylaşmasını ve yönetmesini kolaylaştıran amaca yönelik oluşturulmuş bir depodur. Özellik keşfini, yeniden kullanımını ve paylaşımını basitleştirerek daha hızlı geliştirme, müşteri ekipleri arasında işbirliğinin artması ve maliyetlerin azalmasına yol açar.

Özelliklerin özellik deposuna alınması aşağıdaki adımları içerir:

  1. Bir özellik grubu tanımlayın ve özellik deposunda özellik grubunu oluşturun.
  2. Her veri satırı için bir olay zamanı ve kayıt kimliği ekleyerek özellik deposu için kaynak verileri hazırlayın.
  3. Boto3 SDK'yı kullanarak hazırlanan verileri özellik grubuna alın.

Bu bölümde yalnızca 3. Adımı vurguluyoruz çünkü bu, alım görevinin Ray kullanılarak paralel işlenmesini içeren kısımdır. Bu işleme ilişkin kodun tamamını şuradan inceleyebilirsiniz. GitHub repo.

The alma_özellikleri yöntem adı verilen bir sınıfın içinde tanımlanır Featurestore. Unutmayın ki Featurestore sınıf süslenmiş @ray.remote. Bu, bu sınıfın bir örneğinin, Ray içindeki durum bilgisi olan ve eşzamanlı bir hesaplama birimi olan bir Ray aktörü olduğunu gösterir. Bu, dahili bir durumu koruyan ve bir Ray kümesindeki farklı düğümlerde çalışan birden fazla görev tarafından aynı anda erişilebilen dağıtılmış nesneler oluşturmanıza olanak tanıyan bir programlama modelidir. Aktörler, değişken durumu yönetmek ve kapsüllemek için bir yol sağlayarak onları dağıtılmış bir ortamda karmaşık, durum bilgisi olan uygulamalar oluşturmak için değerli kılar. Kaynak gereksinimlerini aktörlerde de belirtebilirsiniz. Bu durumda her örnek FeatureStore sınıf 0.5 CPU gerektirecektir. Aşağıdaki koda bakın:

@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. """ ...

Aktörle iletişime geçerek iletişime geçebilirsiniz. remote Şebeke. Aşağıdaki kodda, istenen sayıda aktör, komut dosyasına girdi argümanı olarak iletilir. Veriler daha sonra aktör sayısına göre bölümlendirilir ve özellik deposuna alınmak üzere uzak paralel işlemlere aktarılır. Arayabilirsin get Uzak hesaplama tamamlanana ve sonuç elde edilene kadar geçerli görevin yürütülmesini engellemek için nesne ref'inde. Sonuç mevcut olduğunda, ray.get sonucu döndürecek ve mevcut görevin yürütülmesine devam edilecektir.

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)

Verileri eğitim, doğrulama ve test için hazırlayın

Bu adımda, makine öğrenimine hazırlık amacıyla veri kümemizi verimli bir şekilde bölmek, dönüştürmek ve ölçeklendirmek için Ray Veri Kümesini kullanıyoruz. Ray Veri Kümesi, çeşitli depolama sistemlerini ve dosya formatlarını destekleyerek dağıtılmış verileri Ray'e yüklemek için standart bir yol sağlar. Paralel dönüşümler, karıştırma, gruplama ve toplamalar gibi yaygın makine öğrenimi verileri ön işleme işlemleri için API'lere sahiptir. Ray Dataset ayrıca durum bilgisi olan kurulum ve GPU hızlandırma gerektiren işlemleri de yönetir. Spark, Pandas, NumPy ve daha fazlası gibi diğer veri işleme kitaplıklarının yanı sıra TensorFlow ve PyTorch gibi makine öğrenimi çerçeveleriyle sorunsuz bir şekilde bütünleşir. Bu, Ray'in üzerinde uçtan uca veri hatları ve makine öğrenimi iş akışları oluşturmaya olanak tanır. Amaç, uygulayıcılar ve araştırmacılar için dağıtılmış veri işlemeyi ve makine öğrenimini kolaylaştırmaktır.

Bu veri ön işlemesini gerçekleştiren komut dosyalarının bölümlerine bakalım. Verileri özellik deposundan yükleyerek başlıyoruz:

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

Daha sonra, mevcut yüksek düzey soyutlamaları kullanarak verileri böler ve ölçeklendiririz. ray.data kütüphane:

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

İşlenen eğitim, doğrulama ve test veri kümeleri Amazon S3'te depolanır ve sonraki adımlara giriş parametreleri olarak aktarılır.

Model eğitimi ve hiperparametre optimizasyonu gerçekleştirin

Verilerimiz önceden işlenmiş ve modellemeye hazır olduğundan, tahmine dayalı performansı en üst düzeye çıkarmak için bazı ML modellerini eğitmenin ve hiperparametrelerinde ince ayar yapmanın zamanı geldi. Kullanırız XGBoost-RayBirden fazla düğüm ve GPU kullanarak XGBoost modellerinin büyük veri kümeleri üzerinde eğitilmesine olanak tanıyan, Ray üzerine kurulu XGBoost için dağıtılmış bir arka uç. XGBoost'un eğitim ve tahmin API'leri için basit değiştirmeler sağlarken aynı zamanda dağıtılmış veri yönetimi ve eğitimin karmaşıklığını da üst düzeyde ele alır.

Eğitimin birden fazla düğüme dağıtılmasını sağlamak için adlı bir yardımcı sınıf kullanıyoruz. RayHelper. Aşağıdaki kodda gösterildiği gibi, eğitim işinin kaynak yapılandırmasını kullanıyoruz ve ilk ana bilgisayarı baş düğüm olarak seçiyoruz:

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"])

Ana bilgisayar bilgilerini, Ray'in her eğitim işi örneğinde nasıl başlatılacağına karar vermek için kullanabiliriz:

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)

Bir eğitim işi başlatıldığında, bir Ray kümesi çağrılarak başlatılabilir. start_ray() bir örnek üzerinde yöntem RayHelper:

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

Daha sonra eğitim için XGBoost-Ray'in XGBoost eğitmenini kullanıyoruz:

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)

Örnekleme sırasında şunu unutmayın: trainer, geçiyoruz RayParams, aktör sayısını ve aktör başına düşen CPU sayısını alır. XGBoost-Ray, eğitimi Ray kümesine bağlı tüm düğümlere dağıtmak için bu bilgiyi kullanır.

Artık SageMaker Python SDK'sını temel alan bir XGBoost tahmin aracı nesnesi oluşturuyoruz ve bunu HPO işi için kullanıyoruz.

SageMaker Pipelines'ı kullanarak önceki adımları düzenleyin

Uçtan uca ölçeklenebilir ve yeniden kullanılabilir bir makine öğrenimi iş akışı oluşturmak için önceki adımları bir ardışık düzende düzenlemek üzere bir CI/CD aracı kullanmamız gerekir. SageMaker Pipelines, SageMaker, SageMaker Python SDK ve SageMaker Studio ile doğrudan entegrasyona sahiptir. Bu entegrasyon, kullanımı kolay bir Python SDK ile makine öğrenimi iş akışları oluşturmanıza ve ardından SageMaker Studio'yu kullanarak iş akışınızı görselleştirmenize ve yönetmenize olanak tanır. Ayrıca işlem hattının yürütülmesi sırasında verilerinizin geçmişini izleyebilir ve önbelleğe alma adımlarını belirleyebilirsiniz.

SageMaker Pipelines, bir makine öğrenimi iş akışı oluşturmak için gereken adımları içeren bir Yönlendirilmiş Döngüsel Grafik (DAG) oluşturur. Her işlem hattı, adımlar arasındaki veri bağımlılıklarına göre düzenlenen bir dizi birbirine bağlı adımdır ve parametrelendirilebilir; böylece işlem hattının her çalışması için giriş değişkenlerini parametre olarak sağlamanıza olanak tanır. SageMaker Pipelines'ın dört tür boru hattı parametresi vardır: ParameterString, ParameterInteger, ParameterFloat, ve ParameterBoolean. Bu bölümde bazı giriş değişkenlerini parametrelendiriyoruz ve adım önbelleğe alma yapılandırmasını ayarlıyoruz:

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")

İki işleme adımını tanımlıyoruz: biri SageMaker Özellik Mağazasının alımı için, diğeri ise veri hazırlığı için. Bu, daha önce açıklanan önceki adımlara çok benzemelidir. Tek yeni kod satırı ProcessingStep adımların tanımından sonra, işleme işi yapılandırmasını alıp bunu bir ardışık düzen adımı olarak dahil etmemize olanak tanır. Ayrıca veri hazırlama adımının SageMaker Özellik Deposu alma adımına bağımlılığını da belirtiyoruz. Aşağıdaki koda bakın:

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])

Benzer şekilde, bir model eğitimi ve ayarlama adımı oluşturmak için bir tanım eklememiz gerekir: TuningStep SageMaker hiperparametre ayarlamasını işlem hattında bir adım olarak çalıştırmamıza izin veren model eğitim adımının kodundan sonra:

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])

Ayarlama adımından sonra en iyi modeli SageMaker Model Registry'ye kaydetmeyi seçiyoruz. Model kalitesini kontrol etmek için, en iyi modelin hedef ölçüsünü (RMSE) satış hattının giriş parametresi olarak tanımlanan bir eşikle karşılaştıran bir minimum kalite kapısı uyguluyoruz. rmse_threshold. Bu değerlendirmeyi yapmak için bir işlem yürütmek üzere başka bir işlem adımı oluşturuyoruz. değerlendirme komut dosyası. Model değerlendirme sonucu bir özellik dosyası olarak saklanacaktır. Özellik dosyaları, diğer adımların nasıl çalıştırılması gerektiğine karar vermek için bir işleme adımının sonuçlarını analiz ederken özellikle yararlıdır. Aşağıdaki koda bakın:

# 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],
)

Bir tanımlıyoruz ModelStep en iyi modeli üretim hattımızdaki SageMaker Model Kaydına kaydetmek. En iyi modelin önceden belirlediğimiz kalite kontrolümüzü geçememesi durumunda ek olarak bir FailStep bir hata mesajı çıkarmak için:

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]),
)

Daha sonra, bir ConditionStep işlem hattında bir sonraki model kayıt adımının mı yoksa başarısızlık adımının mı atılması gerektiğini değerlendirmek. Bizim durumumuzda, RMSE puanı eşikten düşükse en iyi model kaydedilecektir.

# 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],
)

Son olarak, tanımlanan tüm adımları bir boru hattında düzenleriz:

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)

Önceki işlem hattı doğrudan SageMaker Studio'da görselleştirilebilir ve yürütülebilir veya çağrılarak yürütülebilir. execution = training_pipeline.start(). Aşağıdaki şekil boru hattı akışını göstermektedir.

SageMaker Boru Hattı DAG

Ek olarak, işlem hattı yürütmesi tarafından oluşturulan yapıtların kökenini de inceleyebiliriz.

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)

Modeli dağıtın

En iyi model, bir ardışık düzen çalıştırması yoluyla SageMaker Model Kayıt Defterine kaydedildikten sonra, SageMaker'ın tam olarak yönetilen model dağıtım yeteneklerini kullanarak modeli gerçek zamanlı bir uç noktaya dağıtırız. SageMaker'ın farklı kullanım durumlarının ihtiyaçlarını karşılamak için başka model dağıtım seçenekleri de vardır. Ayrıntılar için bkz. Çıkarım için modelleri dağıtma Kullanım durumunuz için doğru seçeneği seçerken. Öncelikle modeli SageMaker Model Registry'ye kaydettirelim:

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

Modelin şu anki durumu PendingApproval. Durumunu şu şekilde ayarlamamız gerekiyor: Approved dağıtımdan önce:

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
)

Temizlemek

Denemeyi tamamladıktan sonra gereksiz masraflardan kaçınmak için kaynakları temizlemeyi unutmayın. Temizlemek için API'leri çağırarak gerçek zamanlı uç noktayı, model grubunu, işlem hattını ve özellik grubunu silin. Uç Noktayı Sil, Model Paket Grubunu Sil, Pipeline'ı Sil, ve Özellik Grubunu Silsırasıyla ve tüm SageMaker Studio dizüstü bilgisayar örneklerini kapatın.

Sonuç

Bu gönderi, Ray tabanlı makine öğrenimi iş akışlarını düzenlemek için SageMaker Pipelines'ın nasıl kullanılacağına ilişkin adım adım bir açıklama gösterdi. Ayrıca SageMaker Pipelines'ın üçüncü taraf makine öğrenimi araçlarıyla entegre olma yeteneğini de gösterdik. Performans mükemmelliğini ve operasyonel verimliliği sağlamak için Ray iş yüklerini ölçeklenebilir ve güvenli bir şekilde destekleyen çeşitli AWS hizmetleri bulunmaktadır. Şimdi bu güçlü yetenekleri keşfetme ve Amazon SageMaker Pipelines ve Ray ile makine öğrenimi iş akışlarınızı optimize etmeye başlama sırası sizde. Bugün harekete geçin ve ML projelerinizin tüm potansiyelini ortaya çıkarın!


Yazar Hakkında

Amazon SageMaker'ı kullanarak Ray tabanlı makine öğrenimi iş akışlarını düzenleyin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Raju Rangan Amazon Web Services'te (AWS) Kıdemli Çözüm Mimarıdır. Devlet destekli kuruluşlarla çalışarak onların AWS'yi kullanarak AI/ML çözümleri geliştirmelerine yardımcı oluyor. Bulut çözümleriyle uğraşmadığınız zamanlarda onu ailesiyle takılırken veya arkadaşlarıyla canlı bir badminton oyununda kuşları parçalarken yakalayabilirsiniz.

Amazon SageMaker'ı kullanarak Ray tabanlı makine öğrenimi iş akışlarını düzenleyin | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Şeri Ding Amazon Web Services'te (AWS) kıdemli bir AI/ML uzman çözümleri mimarıdır. Bilgisayar bilimleri alanında doktora derecesine sahip olup makine öğrenimi konusunda geniş deneyime sahiptir. Çoğunlukla kamu sektörü müşterileriyle AI/ML ile ilgili çeşitli iş zorlukları üzerinde çalışarak onların AWS Cloud'daki makine öğrenimi yolculuklarını hızlandırmalarına yardımcı oluyor. Müşterilere yardım etmediği zamanlarda açık hava aktivitelerinden hoşlanıyor.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi