

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 노트북 작업 워크플로
<a name="create-notebook-auto-run-dag"></a>

노트북 작업은 사용자 지정 코드를 실행하므로 하나 이상의 노트북 작업 단계가 포함된 파이프라인을 만들 수 있습니다. ML 워크플로에는 데이터를 사전 처리하는 처리 단계, 모델을 빌드하는 훈련 단계, 모델 평가 단계 등 여러 단계가 포함되는 경우가 많습니다. 노트북 작업은 사전 처리를 다루는 데 사용할 수 있습니다. 데이터 변환 또는 수집을 수행하는 노트북, 데이터 정리를 수행하는 EMR 단계, 훈련 단계를 시작하기 전에 입력의 특성화를 수행하는 다른 노트북 작업이 있을 수 있습니다. 노트북 작업에는 파이프라인의 이전 단계 또는 입력 노트북의 파라미터로 사용자 지정 정보가 필요할 수 있습니다. 환경 변수와 파라미터를 노트북에 전달하고 이전 단계에서 정보를 검색하는 방법을 보여주는 예시는 [노트북 단계와 정보 주고받기](create-notebook-auto-run-dag-seq.md) 섹션을 참조하세요.

또 다른 사용 사례에서는 노트북 작업 중 하나가 노트북 실행 중에 다른 노트북을 직접 호출하여 일부 작업을 수행하도록 할 수 있습니다. 이 시나리오에서는 이러한 소싱된 노트북을 노트북 작업 단계의 종속 항목으로 지정해야 합니다. 다른 노트북을 직접 호출하는 방법에 대한 자세한 내용은 [노트북 작업에서 다른 노트북 호출](create-notebook-auto-run-dag-call.md) 섹션을 참조하세요.

SageMaker AI Python SDK를 사용하여 노트북 작업을 예약하는 방법을 보여주는 샘플 노트북을 보려면 [노트북 작업 샘플 예시](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-pipelines/notebook-job-step)를 참조하세요.

# 노트북 단계와 정보 주고받기
<a name="create-notebook-auto-run-dag-seq"></a>

다음 섹션에서는 정보를 노트북에 환경 변수 및 파라미터로 전달하는 방법을 설명합니다.

## 환경 변수 전달
<a name="create-notebook-auto-run-dag-seq-env-var"></a>

다음 예시와 같이 환경 변수를 `NotebookJobStep`의 `environment_variable` 인수에 딕셔너리로 전달합니다.

```
environment_variables = {"RATE": 0.0001, "BATCH_SIZE": 1000}

notebook_job_step = NotebookJobStep(
    ...
    environment_variables=environment_variables,
    ...
)
```

다음 예시와 같이 `os.getenv()`를 사용하여 노트북의 환경 변수를 사용할 수 있습니다.

```
# inside your notebook
import os
print(f"ParentNotebook: env_key={os.getenv('env_key')}")
```

## 파라미터 전달
<a name="create-notebook-auto-run-dag-seq-param"></a>

`NotebookJobStep` 인스턴스의 첫 번째 노트북 작업 단계에 파라미터를 전달할 때 Jupyter Notebook의 셀에 태그를 지정하여 새 파라미터 또는 파라미터 재정의를 적용할 위치를 표시할 수도 있습니다. Jupyter Notebook에서 셀에 태그를 지정하는 방법에 대한 지침은 [노트북 파라미터화](notebook-auto-run-troubleshoot-override.md) 섹션을 참조하세요.

다음 코드 조각과 같이 노트북 작업 단계의 `parameters` 파라미터를 통해 파라미터를 전달합니다.

```
notebook_job_parameters = {
    "company": "Amazon",
}

notebook_job_step = NotebookJobStep(
    ...
    parameters=notebook_job_parameters,
    ...
)
```

입력 노트북 내에서 파라미터는 `parameters` 태그가 지정된 셀 뒤에 또는 태그가 지정된 셀이 없는 경우 노트북의 시작 부분에 적용됩니다.

```
# this cell is in your input notebook and is tagged with 'parameters'
# your parameters and parameter overrides are applied after this cell
company='default'
```

```
# in this cell, your parameters are applied
# prints "company is Amazon"
print(f'company is {company}')
```

## 이전 단계에서 정보 검색
<a name="create-notebook-auto-run-dag-seq-interstep"></a>

다음 논의에서는 이전 단계에서 데이터를 추출하여 노트북 작업 단계로 전달하는 방법을 설명합니다.

**`properties` 속성 사용**

이전 단계의 `properties` 속성과 함께 다음 속성을 사용할 수 있습니다.
+ `ComputingJobName` - 훈련 작업 이름
+ `ComputingJobStatus` - 훈련 작업 상태
+ `NotebookJobInputLocation` - 입력 Amazon S3 위치
+ `NotebookJobOutputLocationPrefix` - 훈련 작업 출력의 경로. 구체적으로 `{NotebookJobOutputLocationPrefix}/{training-job-name}/output/output.tar.gz`. 출력 포함
+ `InputNotebookName` - 입력 노트북 파일 이름
+ `OutputNotebookName` - 출력 노트북 파일 이름(작업이 실패할 경우 훈련 작업 출력 폴더에 없을 수 있음)

다음 코드 조각은 속성 속성에서 파라미터를 추출하는 방법을 보여줍니다.

```
notebook_job_step2 = NotebookJobStep(
    ....
    parameters={
        "step1_JobName": notebook_job_step1.properties.ComputingJobName,
        "step1_JobStatus": notebook_job_step1.properties.ComputingJobStatus,
        "step1_NotebookJobInput": notebook_job_step1.properties.NotebookJobInputLocation,
        "step1_NotebookJobOutput": notebook_job_step1.properties.NotebookJobOutputLocationPrefix,
    }
```

**JsonGet 사용**

앞서 언급한 파라미터 이외의 파라미터를 전달하고 이전 단계의 JSON 출력이 Amazon S3에 있는 경우 `JsonGet`을 사용합니다. `JsonGet`은 Amazon S3의 JSON 파일에서 데이터를 직접 추출할 수 있는 일반적인 메커니즘입니다.

`JsonGet`을 사용하여 Amazon S3에서 JSON 파일을 추출하려면 다음 단계를 완료하세요.

1. Amazon S3에 JSON 파일을 업로드합니다. 데이터가 이미 Amazon S3에 업로드된 경우 이 단계를 건너뜁니다. 다음 예시에서는 Amazon S3에 JSON 파일을 업로드하는 방법을 보여줍니다.

   ```
   import json
   from sagemaker.s3 import S3Uploader
   
   output = {
       "key1": "value1", 
       "key2": [0,5,10]
   }
               
   json_output = json.dumps(output)
   
   with open("notebook_job_params.json", "w") as file:
       file.write(json_output)
   
   S3Uploader.upload(
       local_path="notebook_job_params.json",
       desired_s3_uri="s3://path/to/bucket"
   )
   ```

1. 추출하려는 값에 대한 S3 URI 및 JSON 경로를 제공합니다. 다음 예시에서 `JsonGet`은 키 `key2`(`10`)와 연결된 값의 인덱스 2를 나타내는 객체를 반환합니다.

   ```
   NotebookJobStep(
       ....
       parameters={
           # the key job_key1 returns an object representing the value 10
           "job_key1": JsonGet(
               s3_uri=Join(on="/", values=["s3:/", ..]),
               json_path="key2[2]" # value to reference in that json file
           ), 
           "job_key2": "Amazon" 
       }
   )
   ```

# 노트북 작업에서 다른 노트북 호출
<a name="create-notebook-auto-run-dag-call"></a>

한 노트북 작업이 다른 노트북을 호출하는 파이프라인을 설정할 수 있습니다. 다음은 노트북이 다른 두 노트북을 호출하는 노트북 작업 단계가 있는 파이프라인의 예를 설정합니다. 입력 노트북에는 다음 줄이 포함되어 있습니다.

```
%run 'subfolder/notebook_to_call_in_subfolder.ipynb'
%run 'notebook_to_call.ipynb'
```

다음 코드 조각과 같이 `additional_dependencies`를 사용하여 이러한 노트북을 `NotebookJobStep` 인스턴스에 전달합니다. `additional_dependencies`의 노트북에 제공된 경로는 루트 위치에서 제공됩니다. 종속 항목에 대한 경로를 올바르게 제공할 수 있도록 SageMaker AI가 종속 파일 및 폴더를 Amazon S3에 업로드하는 방법에 대한 자세한 내용은 [NotebookJobStep](https://sagemaker.readthedocs.io/en/stable/workflows/pipelines/sagemaker.workflow.pipelines.html#sagemaker.workflow.notebook_job_step.NotebookJobStep)에서 `additional_dependencies`의 설명을 참조하세요.

```
input_notebook = "inputs/input_notebook.ipynb"
simple_notebook_path = "inputs/notebook_to_call.ipynb"
folder_with_sub_notebook = "inputs/subfolder"

notebook_job_step = NotebookJobStep(
    image_uri=image-uri,
    kernel_name=kernel-name,
    role=role-name,
    input_notebook=input_notebook,
    additional_dependencies=[simple_notebook_path, folder_with_sub_notebook],
    tags=tags,
)
```