

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SageMaker Pipelines のトラブルシューティング
<a name="pipelines-troubleshooting"></a>

Amazon SageMaker Pipelines を使用する際に、さまざまな理由で問題が発生する場合があります。このトピックでは、一般的なエラーとその解決方法を説明します。

 **パイプライン定義の問題** 

パイプライン定義が正しくフォーマットされていない可能性があります。その結果として  実行が失敗したり、ジョブが不正確になったりすることがあります。これらのエラーは、パイプラインが作成されたとき、または実行が発生したときに見つかります。定義が検証されない場合、Pipelines は JSON ファイル内のフォーマットに問題がある文字を特定するエラーメッセージを返します。この問題を解決するには、SageMaker AI Python SDK を使用して作成されたステップが正確かどうかを確認します。

パイプライン定義にステップを含めることができるのは 1 回のみです。このため、ステップは、条件ステップの一部*かつ*同じパイプライン内のパイプラインとして同時に存在することはできません。

 **パイプラインログを確認する** 

以下のコマンドを使用すると、ステップのステータスを表示できます。

```
execution.list_steps()
```

各ステップには、以下の情報が含まれます。
+ パイプラインが起動するエンティティの ARN (SageMaker ジョブ ARN、モデル ARN、モデルパッケージ ARN など) 
+ 失敗の理由には、ステップの失敗の簡単な説明が含まれます。
+ ステップが条件ステップの場合、条件が true または false のどちらに評価されるかが含まれます。  
+ 実行で前のジョブ実行を再利用する場合は、`CacheHit` にソースの実行が一覧表示されます。  

Amazon SageMaker Studio インターフェイスでエラーメッセージとログを表示することもできます。Studio でログを確認する方法については、「[パイプライン実行の詳細を表示する](pipelines-studio-view-execution.md)」を参照してください。

 **アクセス許可がない** 

パイプラインの実行を作成するロールや、パイプラインの実行の各ジョブを作成するステップには、適切なアクセス許可が必要です。これらのアクセス許可がないと、パイプラインの実行を送信したり、SageMaker AI ジョブを期待どおりに実行したりできないことがあります。アクセス許可が適切に設定されていることを確認する方法については、「[IAM アクセス管理](build-and-manage-access.md)」を参照してください。

 **ジョブ実行エラー** 

SageMaker AI ジョブの機能を定義するスクリプトの問題により、ステップの実行時に問題が発生する場合があります。それぞれのジョブには一連の CloudWatch ログがあります。これらのログを Studio から表示する方法については、「[パイプライン実行の詳細を表示する](pipelines-studio-view-execution.md)」を参照してください。SageMaker AI の CloudWatch ログの使用の詳細については、「[Amazon SageMaker AI 用 CloudWatch Logs](logging-cloudwatch.md)」を参照してください。

 **プロパティファイルのエラー** 

パイプラインでプロパティファイルが正しく実装されないと、問題が発生することがあります。プロパティファイルの実装が期待どおりに動作するようにする方法については、「[ステップ間でデータを渡す](build-and-manage-propertyfile.md)」を参照してください。

 **Dockerfile 内のコンテナにスクリプトをコピーする際の問題** 

次のコードサンプルに示されるとおり、スクリプトはコンテナにコピーするか、`entry_point` 引数 (推定エンティティ) または `code` 引数 (プロセッサエンティティ) を介して渡すことができます。

```
step_process = ProcessingStep(
    name="PreprocessAbaloneData",
    processor=sklearn_processor,
    inputs = [
        ProcessingInput(
            input_name='dataset',
            source=...,
            destination="/opt/ml/processing/code",
        )
    ],
    outputs=[
        ProcessingOutput(output_name="train", source="/opt/ml/processing/train", destination = processed_data_path),
        ProcessingOutput(output_name="validation", source="/opt/ml/processing/validation", destination = processed_data_path),
        ProcessingOutput(output_name="test", source="/opt/ml/processing/test", destination = processed_data_path),
    ],
    code=os.path.join(BASE_DIR, "process.py"), ## Code is passed through an argument
    cache_config = cache_config,
    job_arguments = ['--input', 'arg1']
)

sklearn_estimator = SKLearn(
    entry_point=os.path.join(BASE_DIR, "train.py"), ## Code is passed through the entry_point
    framework_version="0.23-1",
    instance_type=training_instance_type,
    role=role,
    output_path=model_path, # New
    sagemaker_session=sagemaker_session, # New
    instance_count=1, # New
    base_job_name=f"{base_job_prefix}/pilot-train",
    metric_definitions=[
        {'Name': 'train:accuracy', 'Regex': 'accuracy_train=(.*?);'},
        {'Name': 'validation:accuracy', 'Regex': 'accuracy_validation=(.*?);'}
    ],
)
```