步驟 4:訓練模型 - Amazon SageMaker

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

步驟 4:訓練模型

Amazon SageMaker Python SDK 提供框架估算器和一般估算器來訓練模型,同時協調機器學習 (ML) 生命週期,存取訓練 SageMaker功能和 AWS 基礎設施,例如 Amazon Elastic Container Registry (Amazon ECR)、Amazon Elastic Compute Cloud (Amazon EC2)、亞馬遜簡單儲存服務 (Amazon S3)。如需有關 SageMaker 內建架構估算器的詳細資訊,請參閱 Amazon SageMaker Python SDK 文件中的架構。如需內建演算法的更多相關資訊,請參閱使用 Amazon SageMaker 內建演算法或預先訓練的模型

選擇訓練演算法

若要為資料集選擇正確的演算法,您通常需要評估不同的模型,以找出最適合您資料的模型。為了簡單起見,在本教程中使用 SageMakerXGBoost 演算法內置算法,而無需對模型進行預先評估。

提示

如果您想為表格式資料集找 SageMaker 到合適的模型,請使用 Amazon SageMaker Autopilot 自動駕駛來自動化機器學習解決方案。如需詳細資訊,請參閱 SageMaker 自動駕駛儀

建立和執行訓練任務

找出要使用的模型之後,請開始建構訓練 SageMaker 估算器。本教學課程使用 XGBoost 內建演算法做為 SageMaker 一般估算器。

執行模型訓練任務
  1. 匯入 Amazon SageMaker Python 開發套件,並從目前的 SageMaker 工作階段擷取基本資訊開始。

    import sagemaker region = sagemaker.Session().boto_region_name print("AWS Region: {}".format(region)) role = sagemaker.get_execution_role() print("RoleArn: {}".format(role))

    其會傳回下列資訊:

    • region— 執行 SageMaker筆記本執行個體的目前 AWS 區域。

    • role — 筆記本執行個體使用的 IAM 角色。

    注意

    通過運行檢查 SageMaker Python SDK 版本sagemaker.__version__。本教學課程是基於 sagemaker>=2.20。如果 SDK 已過期,請執行下列命令來安裝最新版本:

    ! pip install -qU sagemaker

    如果您在現有的 SageMaker Studio 或筆記本執行個體中執行此安裝,則需要手動重新整理核心以完成套用版本更新。

  2. 使用 sagemaker.estimator.Estimator 類別建立一個 XGBoost 估算器。在下列範例程式碼中,XGBoost 估算器命名為 xgb_model

    from sagemaker.debugger import Rule, ProfilerRule, rule_configs from sagemaker.session import TrainingInput s3_output_location='s3://{}/{}/{}'.format(bucket, prefix, 'xgboost_model') container=sagemaker.image_uris.retrieve("xgboost", region, "1.2-1") print(container) xgb_model=sagemaker.estimator.Estimator( image_uri=container, role=role, instance_count=1, instance_type='ml.m4.xlarge', volume_size=5, output_path=s3_output_location, sagemaker_session=sagemaker.Session(), rules=[ Rule.sagemaker(rule_configs.create_xgboost_report()), ProfilerRule.sagemaker(rule_configs.ProfilerReport()) ] )

    若要建構 SageMaker 估算器,請指定下列參數:

    • image_uri — 指定訓練容器映像 URI。在此範例中, SageMaker XGBoost 訓練容器 URI 是使用指定的。sagemaker.image_uris.retrieve

    • role— 代表您執行任務的 AWS Identity and Access Management SageMaker (IAM) 角色 (例如,讀取訓練結果、從 Amazon S3 呼叫模型成品,以及將訓練結果寫入 Amazon S3)。

    • instance_countinstance_type — 模型訓練使用的 Amazon EC2 機器學習 (ML) 運算執行個體類型和數量。在本訓練練習中,您將使用具有 4 個 CPU、16 GB 記憶體、Amazon Elastic Block Store (Amazon EBS) 儲存和高網路效能的單一 ml.m4.xlarge 執行個體。如需 EC2 運算執行個體類型的更多相關資訊,請參閱 Amazon EC2 運算執行個體類型。如需有關計費的詳細資訊,請參閱 Amazon SageMaker 定價

    • volume_size — 要連接到訓練執行個體之 EBS 儲存磁碟區的大小 (以 GB 為單位)。如果您使用 File 模式 (File 是預設模式),這必須大到足以存放訓練資料。如果未指定此參數,預設值將為 30。

    • output_path— S3 儲存貯體的路徑,其中 SageMaker儲存模型成品和訓練結果。

    • sagemaker_session— 管理與 SageMaker API 作業和訓練工作使用之其他 AWS 服務之互動的工作階段物件。

    • rules— 指定 SageMaker 除錯程式內建規則的清單。在此範例中,create_xgboost_report() 規則會建立 XGBoost 報告,提供訓練進度和結果的深入資訊,並且 ProfilerReport() 規則會建立有關 EC2 運算資源使用率的報告。如需詳細資訊,請參閱 SageMaker 除錯器訓練報告

    提示

    如果您想要執行大型深度學習模型的分散式訓練,例如卷積神經網路 (CNN) 和自然語言處理 (NLP) 模型,請使用 Di SageMaker stributed 來進行資料平行處理或模型平行處理。如需詳細資訊,請參閱 Amazon 分佈式培訓 SageMaker

  3. 呼叫估算器的 set_hyperparameters 方法,來設定 XGBoost 演算法的超參數。有關 XGBoost 超參數的完整清單,請參閱XGBoost 超參數

    xgb_model.set_hyperparameters( max_depth = 5, eta = 0.2, gamma = 4, min_child_weight = 6, subsample = 0.7, objective = "binary:logistic", num_round = 1000 )
    提示

    您也可以使用超參數最佳化功能來調整 SageMaker 超參數。如需詳細資訊,請參閱 執行自動模型調整 SageMaker

  4. 使用 TrainingInput 類別來設定用於訓練的資料輸入流程。以下範例程式碼來顯示如何設定 TrainingInput 物件來使用您上傳到 Amazon S3 的訓練和驗證資料集,請參閱將資料分割為訓練、測試和驗證資料集。部分。

    from sagemaker.session import TrainingInput train_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/train.csv"), content_type="csv" ) validation_input = TrainingInput( "s3://{}/{}/{}".format(bucket, prefix, "data/validation.csv"), content_type="csv" )
  5. 若要開始模型訓練,請使用訓練和驗證資料集呼叫估算器的 fit 方法。透過設定 wait=Truefit 方法會顯示進度日誌並等待訓練完成,再傳回結果。

    xgb_model.fit({"train": train_input, "validation": validation_input}, wait=True)

    如需模型訓練的更多相關資訊,請參閱用 Amazon 訓練模型 SageMaker。本教學課程訓練工作最多可能需要 10 分鐘的時間。

    訓練工作完成後,您可以下載 XGBoost 訓練報告和偵錯工具產生的效能分析報告。 SageMaker XGBoost 訓練報告可讓您深入瞭解訓練進度和結果,例如與迭代、功能重要性、混淆矩陣、準確度曲線以及其他訓練統計結果相關的損失函式。例如,您可以從 XGBoost 訓練報告中找到以下損失曲線,清楚地表明存在過度擬合的問題。

    執行下列程式碼以指定產生 Debugger 訓練報告的 S3 儲存貯體 URI,並檢查報告是否存在。

    rule_output_path = xgb_model.output_path + "/" + xgb_model.latest_training_job.job_name + "/rule-output" ! aws s3 ls {rule_output_path} --recursive

    將 Debugger XGBoost 訓練和效能分析報告下載到目前的工作區:

    ! aws s3 cp {rule_output_path} ./ --recursive

    執行下列 IPython 指令碼以取得 XGBoost 訓練報告的檔案連結:

    from IPython.display import FileLink, FileLinks display("Click link below to view the XGBoost Training report", FileLink("CreateXgboostReport/xgboost_report.html"))

    下列 IPython 指令碼會傳回 Debugger 分析報告的檔案連結,其中顯示 EC2 執行個體資源使用率、系統瓶頸偵測結果和 python 作業剖析結果的摘要和詳細資訊:

    profiler_report_name = [rule["RuleConfigurationName"] for rule in xgb_model.latest_training_job.rule_job_summary() if "Profiler" in rule["RuleConfigurationName"]][0] profiler_report_name display("Click link below to view the profiler report", FileLink(profiler_report_name+"/profiler-output/profiler-report.html"))
    提示

    如果 HTML 報告未在 JupyterLab 檢視中轉譯繪圖,您必須選擇報表頂端的「信任 HTML」。

    若要找出訓練問題,例如過度擬合、漸層消失,以及其他阻止模型收斂的問題,請使用 SageMaker Debug 並在製作機器學習模型的原型和訓練時採取自動化動作。如需詳細資訊,請參閱 使用 Amazon SageMaker 偵錯工具偵錯並改善模型效能。若要尋找模型參數的完整分析,請參閱 Amazon SageMaker 偵錯工具說明範例筆記本。

您現在擁有一個訓練有素的 XGBoost 模型。 SageMaker 將模型成品存放在 S3 儲存貯體中。若要尋找模型成品的位置,請執行下列程式碼以列印 xgb_model 估算器的 model_data 屬性:

xgb_model.model_data
提示

若要測量 ML 生命週期的每個階段 (資料收集、模型訓練和調整,以及監視部署用於預測的 ML 模型) 期間可能發生的偏差,請使用 SageMaker 澄清。如需詳細資訊,請參閱 模型可解釋性。 end-to-end 舉個例子,請參閱 SageMaker 澄清範例筆記本的公平性和可解釋性。