

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

# OpenAI호환 APIs 사용하여 개방형 모델 미세 조정
<a name="fine-tuning-openai-apis"></a>

Amazon Bedrock은 파운데이션 모델을 미세 조정하기 위한 OpenAI 호환되는 API 엔드포인트를 제공합니다. 이러한 엔드포인트를 사용하면 익숙한 OpenAI SDK와 도구를 사용하여 Amazon Bedrock 모델을 사용하여 미세 조정 작업을 생성, 모니터링 및 관리할 수 있습니다. SDKs 이 페이지에서는 강화 미세 조정을 위해 이러한 APIs를 사용하는 방법을 강조합니다.

## 주요 기능
<a name="fine-tuning-openai-key-capabilities"></a>
+ **훈련 파일 업로드** - 파일 API를 사용하여 미세 조정 작업을 위한 훈련 데이터를 업로드하고 관리합니다.
+ **미세 조정 작업 생성** - 사용자 지정 훈련 데이터 및 보상 함수를 사용하여 미세 조정 작업 시작
+ **작업 나열 및 검색** - 모든 미세 조정 작업을 보고 특정 작업에 대한 세부 정보 가져오기
+ **작업 이벤트 모니터링** - 세부 이벤트 로그를 통해 미세 조정 진행 상황 추적
+ **액세스 체크포인트** - 훈련 중에 생성된 중간 모델 체크포인트 검색
+ **즉각적인 추론** - 미세 조정이 완료된 후 추가 배포 단계 없이 Amazon Bedrock의 OpenAI 호환 APIs(응답/채팅 완료 API)를 통한 온디맨드 추론을 위해 결과 미세 조정된 모델을 사용합니다.
+ **간편한 마이그레이션** - 기존 OpenAI SDK 코드베이스와 호환

## 개방형 가중치 모델을 위한 강화 미세 조정 워크플로
<a name="fine-tuning-openai-workflow"></a>

Amazon Bedrock에는 미세 조정 프로세스를 생성하고 관리할 수 있는 특정 권한이 필요하므로 미세 조정 전에 사전 요구 사항이 있는지 확인합니다. 포괄적인 보안 및 권한 정보는 섹션을 참조하세요[개방형 모델을 위한 액세스 및 보안](rft-open-weight-access-security.md).

5단계로 개방형 가중치 모델에 대한 강화 미세 조정을 실행합니다.

1. **훈련 데이터 세트 업로드** - 파일 API를 사용하여 훈련 데이터 세트를 강화 미세 조정하기 위해 “세분 조정”이라는 목적으로 필수 형식(예: JSONL)으로 프롬프트를 업로드합니다. 자세한 내용은 [개방형 모델을 위한 데이터 준비](rft-prepare-data-open-weight.md) 단원을 참조하십시오.

1. **보상 함수 구성** - Lambda 함수를 사용하여 정확성, 구조, 어조 또는 기타 목표에 따라 모델 응답을 채점하도록 그레이더를 정의합니다. 자세한 내용은 [개방형 모델에 대한 보상 함수 설정](reward-functions-open-weight.md) 단원을 참조하십시오.

1. **미세 조정 작업 생성** OpenAI- 기본 모델, 데이터 세트, 보상 함수 및 하이퍼파라미터와 같은 기타 선택적 설정을 지정하여 호환 API를 사용하여 강화 미세 조정 작업을 시작합니다. 자세한 내용은 [미세 조정 작업 생성](fine-tuning-openai-job-create.md#fine-tuning-openai-create-job) 단원을 참조하십시오.

1. **훈련 진행 상황 모니터링** - 미세 조정 작업 APIs. 자세한 내용은 [미세 조정 이벤트 나열](fine-tuning-openai-job-create.md#fine-tuning-openai-list-events) 단원을 참조하십시오. 중간 모델 체크포인트에 액세스하여 다양한 훈련 단계에서 성능을 평가합니다. 섹션을 참조하세요[미세 조정 체크포인트 나열](fine-tuning-openai-job-create.md#fine-tuning-openai-list-checkpoints).

1. **추론 실행** - Amazon Bedrock의 OpenAI호환 응답 또는 채팅 완료 APIs를 통해 추론에 직접 미세 조정된 모델 ID를 사용합니다. 자세한 내용은 [미세 조정된 모델을 사용하여 추론 실행](fine-tuning-openai-job-create.md#fine-tuning-openai-inference) 단원을 참조하십시오.

## 지원되는 리전 및 엔드포인트
<a name="fine-tuning-openai-supported-regions"></a>

다음 표에는 OpenAI 호환되는 미세 조정 APIs.


**OpenAI 호환되는 미세 조정 APIs에 지원되는 모델 및 리전**  

| 제공업체 | 모델 | 모델 ID | 리전 이름 | 리전 | 엔드포인트 | 
| --- | --- | --- | --- | --- | --- | 
| OpenAI | Gpt-oss-20B | openai.gpt-oss-20b | 미국 서부(오리건) | us-west-2 | bedrock-mantle.us-west-2.api.aws | 
| 쿠엔 | Qwen3 32B | qwen.qwen3-32b | 미국 서부(오리건) | us-west-2 | bedrock-mantle.us-west-2.api.aws | 

# 개방형 모델을 위한 액세스 및 보안
<a name="rft-open-weight-access-security"></a>

강화 미세 조정(RFT)을 시작하기 전에 RFT 관련 작업에 Amazon Bedrock에 필요한 액세스 유형을 이해해야 합니다. RFT는 보상 함수 실행 기능으로 인해 표준 미세 조정 이외의 추가 권한이 필요합니다.

## 사전 조건
<a name="fine-tuning-openai-prereq"></a>

Amazon Bedrock의 OpenAI호환 미세 조정 APIs를 사용하기 전에 다음이 있는지 확인합니다.

1. Amazon Bedrock에 액세스할 수 있는 적절한 권한이 있는 AWS 계정

1. **인증** - 다음을 사용하여 인증할 수 있습니다.
   + Amazon Bedrock API 키(OpenAISDK에 필요하고 HTTP 요청에 사용 가능)
   + AWS 자격 증명(HTTP 요청에 지원됨)
**참고**  
Amazon Bedrock 단기/장기 API 키를 사용하는 경우 역할에 `AmazonBedrockMantleFullAccess` 및 [AWSLambdaRole](https://docs.aws.amazon.com/bedrock/latest/ug/rft-open-weight-access-security#openai-fine-tuning-lambda-permissions)이라는 IAM 정책 권한에 대한 액세스 권한이 있는지 확인합니다.

1. **OpenAI SDK(선택 사항)** - SDK 기반 요청을 사용하는 경우 OpenAI Python SDK를 설치합니다.

1. **환경 변수** - 다음 환경 변수를 설정합니다.
   + `OPENAI_API_KEY` - Amazon Bedrock API 키로 설정
   + `OPENAI_BASE_URL` - 해당 리전의 Amazon Bedrock 엔드포인트로 설정(예: `https://bedrock-mantle.us-west-2.api.aws/v1`)

   자세한 내용은 [응답 API](bedrock-mantle.md#bedrock-mantle-responses) 단원을 참조하십시오.

1. 용도가 인 JSONL 파일 형식의 **훈련 데이터**입니다`fine-tune`. 자세한 내용은 [개방형 모델을 위한 데이터 준비](rft-prepare-data-open-weight.md) 단원을 참조하십시오.

## 보상 함수에 대한 Lambda 권한
<a name="openai-fine-tuning-lambda-permissions"></a>

Lambda 호출 권한을 추가해야 합니다. 다음은 사용할 수 있는 정책 예제입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:reward-function-name"
            ]
        }
    ]
}
```

Amazon Bedrock 호스팅 모델을 보상 함수를 설정하기 위한 심사자로 사용할 수도 있습니다. 파운데이션 모델을 Lambda 실행 역할에 호출하려면 특정 권한을 추가해야 합니다. Lambda 역할에서 등급 지정을 위해 LLMs에 대해 이러한 관리형 정책을 구성할 수 있습니다. [AmazonBedrockLimitedAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonBedrockLimitedAccess.html)를 참조하세요.

다음은 Invoke API를 사용하여 판단으로 Amazon Bedrock 파운데이션 모델을 호출하는 예입니다.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:*:*:foundation-model/*"
            ]
        }
    ]
}
```

# 개방형 모델을 위한 데이터 준비
<a name="rft-prepare-data-open-weight"></a>

OpenAI 호환 APIs를 사용하여 강화 미세 조정으로 개방형 가중치 모델을 미세 조정하는 경우 용도와 함께 자체 프롬프트를 JSONL 형식으로 가져와서 훈련 데이터를 제공합니다`fine-tune`.

## 훈련 데이터 형식 및 요구 사항
<a name="rft-data-format-open-weight"></a>

훈련 데이터는 100-20K 예제와 함께 OpenAI 채팅 완료 형식을 따라야 합니다. 각 훈련 예제에는 다음이 포함됩니다.
+ `messages`:이 필드에 모델에 제공된 입력 프롬프트가 포함된 사용자, 시스템 또는 어시스턴트 역할을 포함합니다.
+ `reference_answer`:이 필드에는 보상 함수가 모델의 응답을 채점하는 데 사용하는 예상 출력 또는 평가 기준이 포함되어야 합니다. 이는 구조화된 출력으로 제한되지 않으며 보상 함수가 품질을 평가하는 데 도움이 되는 모든 형식을 포함할 수 있습니다.
+ [선택 사항] 그레이더 Lambda가 그레이딩에 사용하는 필드를 추가할 수 있습니다.

**요구 사항:**
+ OpenAI 채팅 완료 형식의 프롬프트가 있는 JSONL 형식(줄당 프롬프트 1개)
+ 목적은 로 설정해야 합니다. `fine-tune` 
+ 훈련 데이터 세트의 레코드 최소 100개
+ Amazon Bedrock은 훈련 데이터 세트 형식을 자동으로 검증합니다.

------
#### [ Example: General question-answering ]

```
{
            "messages": [
                {
                    "role": "system", 
                    "content": "You are a helpful assistant"
                },
                {
                    role": "user", 
                    "content": "What is machine learning?"}
            ],
            "reference_answer": "Machine learning is a subset of artificial intelligence that enables computers to learn and make decisions from data without being explicitly programmed."
            }
```

------
#### [ Example: Math problem ]

```
{
  "id": "sample-001",
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  }
}
```

------

## 파일 API
<a name="fine-tuning-openai-files-api"></a>

OpenAI 호환 파일 API를 사용하여 미세 조정 작업을 위한 훈련 데이터를 업로드할 수 있습니다. 파일은 Amazon Bedrock에 안전하게 저장되며 미세 조정 작업을 생성할 때 사용됩니다. 전체 API 세부 정보는 [OpenAI 파일 설명서를](https://platform.openai.com/docs/api-reference/files) 참조하세요.

### 훈련 파일 업로드
<a name="fine-tuning-openai-upload-file"></a>

훈련 파일을 업로드하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Upload training file
with open(TRAINING_FILE_PATH, 'rb') as f:
    file_response = client.files.create(
        file=f,
        purpose='fine-tune'
    )

# Store file ID for next steps
training_file_id = file_response.id
print(f"✅ Training file uploaded successfully: {training_file_id}")
```

------
#### [ HTTP request ]

에 POST 요청`/v1/files`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -F purpose="fine-tune" \
  -F file="@training_data.jsonl"
```

------

### 파일 세부 정보 검색
<a name="fine-tuning-openai-retrieve-file"></a>

특정 파일에 대한 세부 정보를 검색하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Retrieve file details
file_details = client.files.retrieve(training_file_id)

# Print raw response
print(json.dumps(file_details.model_dump(), indent=2))
```

------
#### [ HTTP request ]

에 GET 요청을 합니다`/v1/files/{file_id}`.

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### 파일 나열
<a name="fine-tuning-openai-list-files"></a>

업로드된 파일을 나열하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List files
files_response = client.files.list(purpose='fine-tune')

# Print raw response
print(json.dumps(files_response.model_dump(), indent=2))
```

------
#### [ HTTP request ]

에 GET 요청을 합니다`/v1/files`.

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/files?purpose=fine-tune \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

### 파일 삭제
<a name="fine-tuning-openai-delete-file"></a>

파일을 삭제하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Delete file
delete_response = client.files.delete(training_file_id)
```

------
#### [ HTTP request ]

에 대한 DELETE 요청`/v1/files/{file_id}`:

```
curl -X DELETE https://bedrock-mantle.us-west-2.api.aws/v1/files/file-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 효과적인 훈련 데이터의 특성
<a name="rft-data-characteristics-open-weight"></a>

효과적인 RFT 훈련 데이터에는 세 가지 주요 특성이 필요합니다.
+ **명확성 및 일관성** - 일관된 형식 지정으로 명확하고 모호하지 않은 프롬프트를 사용합니다. 모순된 레이블, 모호한 지침 또는 훈련을 오도하는 참조 답변 충돌을 방지합니다.
+ **다양성** - 다양한 사용자 유형 및 시나리오의 프로덕션 사용 패턴을 반영하는 다양한 입력 형식, 엣지 케이스 및 난이도를 포함합니다.
+ **효율적인 보상 함수** - 빠르게 실행되고(초, 분 아님),와 병렬화되고 AWS Lambda, 비용 효율적인 훈련을 위한 일관된 점수를 반환하는 함수를 설계합니다.

## 추가 속성
<a name="rft-additional-properties-open-weight"></a>

RFT 데이터 형식은 핵심 스키마 요구 사항(`messages` 및 ) 이외의 사용자 지정 필드를 지원합니다`reference_answer`. 이러한 유연성을 통해 보상 함수가 적절한 평가에 필요한 데이터를 추가할 수 있습니다.

**참고**  
레시피에서 이를 구성할 필요가 없습니다. 데이터 형식은 기본적으로 추가 필드를 지원합니다. 훈련 데이터 JSON에 포함하면 `metadata` 필드의 보상 함수로 전달됩니다.

**일반적인 추가 속성**
+ `task_id` - 추적을 위한 고유 식별자
+ `difficulty_level` - 문제 복잡성 지표
+ `domain` - 주제 영역 또는 범주
+ `expected_reasoning_steps` - 솔루션의 단계 수

이러한 추가 필드는 평가 중에 보상 함수에 전달되므로 특정 사용 사례에 맞게 조정된 정교한 점수 평가 로직이 가능합니다.

**추가 속성이 있는 예제**

------
#### [ Chemistry problem ]

```
{
  "id": "chem-001",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful chemistry assistant"
    },
    {
      "role": "user",
      "content": "Predict hydrogen bond donors and acceptors for this SMILES: CCN(CC)CCC(=O)c1sc(N)nc1C"
    }
  ],
  "reference_answer": {
    "donor_bond_counts": 2,
    "acceptor_bond_counts": 4
  }
}
```

`reference_answer` 필드에는 보상 함수가 모델의 응답을 채점하는 데 사용하는 예상 출력 또는 평가 기준이 포함되어 있습니다. 구조화된 출력에만 국한되지 않습니다. 보상 함수가 품질을 평가하는 데 도움이 되는 모든 형식을 포함할 수 있습니다.

------
#### [ Math problem with metadata ]

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  },
  "task_id": "algebra_001",
  "difficulty_level": "easy",
  "domain": "algebra",
  "expected_reasoning_steps": 3
}
```

------

# 개방형 모델에 대한 보상 함수 설정
<a name="reward-functions-open-weight"></a>

보상 함수는 응답 품질을 평가하고 모델 훈련을 위한 피드백 신호를 제공합니다. 사용자 지정 Lambda 함수를 사용하여 보상 함수를 설정할 수 있습니다. 작업 요구 사항에 맞는 접근 방식을 선택합니다.

## 보상 평가를 위한 사용자 지정 Lambda 함수
<a name="rft-custom-lambda-functions"></a>

사용자 지정 Lambda 함수를 사용하여 보상 함수를 설정할 수 있습니다. Lambda 함수 내에서 평가 로직을 구현하는 방법을 유연하게 사용할 수 있습니다.
+ **목표 작업** - 코드 생성 또는 수학 추론과 같은 목표 작업의 경우 알려진 표준 또는 테스트 사례에 대한 정확성을 확인하는 검증 가능한 규칙 기반 그레이더를 사용합니다.
+ **주관적 작업** - 지침 준수 또는 챗봇 상호 작용과 같은 주관적 작업의 경우 Amazon Bedrock 파운데이션 모델을 Lambda 함수 내의 판사로 호출하여 기준에 따라 응답 품질을 평가합니다.

Lambda 함수는 작업 요구 사항에 따라 복잡한 로직을 구현하거나, 외부 APIs 통합하거나, 다단계 계산을 수행하거나, 여러 평가 기준을 결합할 수 있습니다.

**참고**  
사용자 지정 Lambda 함수를 사용하는 경우:  
복잡한 평가의 경우 Lambda 제한 시간을 기본 3초에서 최대 15분으로 늘립니다.
Lambda 실행 역할에는에 설명된 대로 Lambda 함수를 호출할 수 있는 권한이 필요합니다[보상 함수에 대한 Lambda 권한](rft-open-weight-access-security.md#openai-fine-tuning-lambda-permissions).

## Lambda 함수 구현 세부 정보
<a name="rft-lambda-implementation-open-weight"></a>

사용자 지정 Lambda 보상 함수를 구현할 때 함수는 다음 형식으로 데이터를 수락하고 반환해야 합니다.

------
#### [ Input structure ]

```
[{
  "id": "123",
  "messages": [
    {
      "role": "user",
      "content": "Do you have a dedicated security team?"
    },
    {
      "role": "assistant",
      "content": "As an AI developed by Amazon, I don not have a dedicated security team..."
    }
  ],
  "metadata": {
    "reference_answer": {
      "compliant": "No",
      "explanation": "As an AI developed by Company, I do not have a traditional security team..."
    },
    "my_key": "sample-001"
  }
}]
```

------
#### [ Output structure ]

```
[{
  "id": "123",
  "aggregate_reward_score": 0.85,
  "metrics_list": [
    {
      "name": "accuracy",
      "value": 0.9,
      "type": "Reward"
    },
    {
      "name": "policy_compliance",
      "value": 0.8,
      "type": "Metric"
    }
  ]
}]
```

------

**설계 지침**
+ 순위 **응답** - 가장 좋은 답변에 명확하게 더 높은 점수를 부여합니다.
+ **일관된 검사 사용** - 작업 완료, 형식 준수, 안전 및 적절한 길이 평가
+ **안정적인 조정 유지** - 점수를 정규화하고 확장할 수 없도록 유지

# OpenAI APIs 사용하여 개방형 가중치 모델에 대한 미세 조정 작업 생성 및 관리
<a name="fine-tuning-openai-job-create"></a>

OpenAI 호환 미세 조정 작업 APIs 사용하면 미세 조정 작업을 생성, 모니터링 및 관리할 수 있습니다. 이 페이지에서는 강화 미세 조정을 위해 이러한 APIs를 사용하는 방법을 강조합니다. 전체 API 세부 정보는 [OpenAI 미세 조정 설명서를](https://platform.openai.com/docs/api-reference/fine-tuning) 참조하세요.

## 미세 조정 작업 생성
<a name="fine-tuning-openai-create-job"></a>

지정된 데이터 세트에서 새 모델을 생성하는 프로세스를 시작하는 미세 조정 작업을 생성합니다. 전체 API 세부 정보는 [OpenAI 미세 조정 작업 생성 설명서를](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/create) 참조하세요.

### 예제
<a name="fine-tuning-openai-create-job-examples"></a>

RFT 메서드를 사용하여 미세 조정 작업을 생성하려면 원하는 메서드의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Create fine-tuning job with RFT method
job_response = client.fine_tuning.jobs.create(
    model=MODEL_ID,
    training_file=training_file_id,
    # Suffix field is not supported so commenting for now.
    # suffix="rft-example",  # Optional: suffix for fine-tuned model name
    extra_body={
        "method": {
            "type": "reinforcement", 
            "reinforcement": {
                "grader": {
                    "type": "lambda",
                    "lambda": {
                        "function": "arn:aws:lambda:us-west-2:123456789012:function:my-reward-function"  # Replace with your Lambda ARN
                    }
                },
                "hyperparameters": {
                    "n_epochs": 1,  # Number of training epochs
                    "batch_size": 4,  # Batch size
                    "learning_rate_multiplier": 1.0  # Learning rate multiplier
                }
            }
        }
    }
)

# Store job ID for next steps
job_id = job_response.id
print({job_id})
```

------
#### [ HTTP request ]

에 POST 요청`/v1/fine_tuning/jobs`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "training_file": "file-abc123",
    "model": "gpt-4o-mini",
    "method": {
      "type": "reinforcement",
      "reinforcement": {
        "grader": {
          "type": "lambda",
          "lambda": {
            "function": "arn:aws:lambda:us-west-2:123456789012:function:my-grader"
          }
        },
        "hyperparameters": {
          "n_epochs": 1,
          "batch_size": 4,
          "learning_rate_multiplier": 1.0
        }
      }
    }
  }'
```

------

## 미세 조정 이벤트 나열
<a name="fine-tuning-openai-list-events"></a>

미세 조정 작업에 대한 이벤트를 나열합니다. 미세 조정 이벤트는 훈련 지표, 체크포인트 생성, 오류 메시지 등 작업 진행 상황에 대한 자세한 정보를 제공합니다. 전체 API 세부 정보는 [OpenAI 미세 조정 이벤트 나열 설명서를](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/list_events) 참조하세요.

### 예제
<a name="fine-tuning-openai-list-events-examples"></a>

미세 조정 이벤트를 나열하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List fine-tuning events
events = client.fine_tuning.jobs.list_events(
    fine_tuning_job_id="ftjob-abc123",
    limit=50
)

for event in events.data:
    print(f"[{event.created_at}] {event.level}: {event.message}")
    if event.data:
        print(f"  Metrics: {event.data}")
```

------
#### [ HTTP request ]

에 GET 요청`/v1/fine_tuning/jobs/{fine_tuning_job_id}/events`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/events?limit=50
```

------

이벤트에는 다음과 같은 정보가 포함됩니다.
+ 훈련 시작 및 완료 메시지
+ 체크포인트 생성 알림
+ 각 단계의 훈련 지표(손실, 정확도)
+ 작업이 실패할 경우 오류 메시지

모든 이벤트를 페이지 매김하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Paginate through all events
all_events = []
after = None

while True:
    events = client.fine_tuning.jobs.list_events(
        fine_tuning_job_id="ftjob-abc123",
        limit=100,
        after=after
    )
    
    all_events.extend(events.data)
    
    if not events.has_more:
        break
    
    after = events.data[-1].id
```

------
#### [ HTTP request ]

`after` 파라미터를 사용하여 여러 GET 요청을 수행합니다.

```
# First request
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/events?limit=100

# Subsequent requests with 'after' parameter
curl "https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/events?limit=100&after=ft-event-abc123"
```

------

## 미세 조정 작업 검색
<a name="fine-tuning-openai-retrieve-job"></a>

미세 조정 작업에 대한 자세한 정보를 가져옵니다. 전체 API 세부 정보는 [OpenAI 미세 조정 작업 검색 설명서를](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/retrieve) 참조하세요.

### 예제
<a name="fine-tuning-openai-retrieve-job-examples"></a>

특정 작업 세부 정보를 검색하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Retrieve specific job details
job_details = client.fine_tuning.jobs.retrieve(job_id)

# Print raw response
print(json.dumps(job_details.model_dump(), indent=2))
```

------
#### [ HTTP request ]

에 GET 요청을 합니다`/v1/fine_tuning/jobs/{fine_tuning_job_id}`.

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 미세 조정 작업 나열
<a name="fine-tuning-openai-list-jobs"></a>

페이지 매김 지원이 포함된 조직의 미세 조정 작업을 나열합니다. 전체 API 세부 정보는 [OpenAI 미세 조정 작업 나열 설명서를](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/list) 참조하세요.

### 예제
<a name="fine-tuning-openai-list-jobs-examples"></a>

제한 및 페이지 매김이 있는 미세 조정 작업을 나열하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List fine-tuning jobs with limit and pagination
response = client.fine_tuning.jobs.list(
    limit=20  # Maximum number of jobs to return
)

# Print raw response
print(json.dumps(response.model_dump(), indent=2))
```

------
#### [ HTTP request ]

에 GET 요청`/v1/fine_tuning/jobs`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs?limit=20 \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 미세 조정 작업 취소
<a name="fine-tuning-openai-cancel-job"></a>

진행 중인 미세 조정 작업을 취소합니다. 취소한 후에는 작업을 재개할 수 없습니다. 전체 API 세부 정보는 [OpenAI 미세 조정 작업 취소 설명서를](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/methods/cancel) 참조하세요.

### 예제
<a name="fine-tuning-openai-cancel-job-examples"></a>

미세 조정 작업을 취소하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Cancel fine-tuning job
cancel_response = client.fine_tuning.jobs.cancel("ftjob-abc123")

print(f"Job ID: {cancel_response.id}")
print(f"Status: {cancel_response.status}")  # Should be "cancelled"
```

------
#### [ HTTP request ]

에 POST 요청`/v1/fine_tuning/jobs/{fine_tuning_job_id}/cancel`:

```
curl -X POST https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/cancel \
  -H "Authorization: Bearer $OPENAI_API_KEY"
```

------

## 미세 조정 체크포인트 나열
<a name="fine-tuning-openai-list-checkpoints"></a>

미세 조정 작업에 대한 체크포인트를 나열합니다. 체크포인트는 다양한 훈련 단계에서 성능을 평가하는 추론에 사용할 수 있는 미세 조정 중에 생성되는 중간 모델 스냅샷입니다. 자세한 내용은 [OpenAI 미세 조정 체크포인트 나열 설명서를 참조하세요](https://developers.openai.com/api/reference/resources/fine_tuning/subresources/jobs/subresources/checkpoints/methods/list).

### 예제
<a name="fine-tuning-openai-list-checkpoints-examples"></a>

미세 조정 작업에 대한 체크포인트를 나열하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# List checkpoints for a fine-tuning job
checkpoints = client.fine_tuning.jobs.checkpoints.list(
    fine_tuning_job_id="ftjob-abc123",
    limit=10
)

for checkpoint in checkpoints.data:
    print(f"Checkpoint ID: {checkpoint.id}")
    print(f"Step: {checkpoint.step_number}")
    print(f"Model: {checkpoint.fine_tuned_model_checkpoint}")
    print(f"Metrics: {checkpoint.metrics}")
    print("---")
```

------
#### [ HTTP request ]

에 GET 요청`/v1/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/fine_tuning/jobs/ftjob-abc123/checkpoints?limit=10
```

------

각 체크포인트에는 다음이 포함됩니다.
+ **체크포인트 ID** - 체크포인트의 고유 식별자
+ **단계 번호** - 체크포인트가 생성된 훈련 단계
+ **모델 체크포인트** - 추론에 사용할 수 있는 모델 식별자
+ **지표** -이 체크포인트의 검증 손실 및 정확도

추론에 체크포인트 모델을 사용하려면 원하는 방법의 탭을 선택한 다음 다음 단계를 따릅니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Test inference with a checkpoint
response = client.chat.completions.create(
    model=checkpoint.fine_tuned_model_checkpoint,
    messages=[{"role": "user", "content": "What is AI?"}],
    max_tokens=100
)

print(response.choices[0].message.content)
```

------
#### [ HTTP request ]

에 POST 요청`/v1/chat/completions`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "ft:gpt-4o-mini:openai:custom:7p4lURel:ckpt-step-1000",
    "messages": [{"role": "user", "content": "What is AI?"}],
    "max_tokens": 100
  }'
```

------

## 미세 조정된 모델을 사용하여 추론 실행
<a name="fine-tuning-openai-inference"></a>

미세 조정 작업이 완료되면 응답 API 또는 채팅 완료 API를 통해 추론에 미세 조정된 모델을 사용할 수 있습니다. 전체 API 세부 정보는 섹션을 참조하세요[OpenAI APIs 사용하여 응답 생성](bedrock-mantle.md).

### 응답 API
<a name="fine-tuning-openai-responses-api"></a>

미세 조정된 모델과 함께 단일 턴 텍스트 생성에 응답 API를 사용합니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Get the fine-tuned model ID
job_details = client.fine_tuning.jobs.retrieve("ftjob-abc123")

if job_details.status == 'succeeded' and job_details.fine_tuned_model:
    fine_tuned_model = job_details.fine_tuned_model
    print(f"Using fine-tuned model: {fine_tuned_model}")
    
    # Run inference with Responses API
    response = client.completions.create(
        model=fine_tuned_model,
        prompt="What is the capital of France?",
        max_tokens=100,
        temperature=0.7
    )
    
    print(f"Response: {response.choices[0].text}")
else:
    print(f"Job status: {job_details.status}")
    print("Job must be in 'succeeded' status to run inference")
```

------
#### [ HTTP request ]

에 POST 요청`/v1/completions`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "ft:gpt-4o-mini:openai:custom-model:7p4lURel",
    "prompt": "What is the capital of France?",
    "max_tokens": 100,
    "temperature": 0.7
  }'
```

------

### 채팅 완료 API
<a name="fine-tuning-openai-inference-examples"></a>

채팅 완료 API를 사용하여 미세 조정된 모델과의 대화형 상호 작용을 수행합니다.

------
#### [ OpenAI SDK (Python) ]

```
# Requires OPENAI_API_KEY and OPENAI_BASE_URL environment variables
from openai import OpenAI
client = OpenAI()

# Get the fine-tuned model ID
job_details = client.fine_tuning.jobs.retrieve("ftjob-abc123")

if job_details.status == 'succeeded' and job_details.fine_tuned_model:
    fine_tuned_model = job_details.fine_tuned_model
    print(f"Using fine-tuned model: {fine_tuned_model}")
    
    # Run inference
    inference_response = client.chat.completions.create(
        model=fine_tuned_model,
        messages=[
            {"role": "user", "content": "What is the capital of France?"}
        ],
        max_tokens=100
    )
    
    print(f"Response: {inference_response.choices[0].message.content}")
else:
    print(f"Job status: {job_details.status}")
    print("Job must be in 'succeeded' status to run inference")
```

------
#### [ HTTP request ]

에 POST 요청`/v1/chat/completions`:

```
curl https://bedrock-mantle.us-west-2.api.aws/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "ft:gpt-4o-mini:openai:custom-model:7p4lURel",
    "messages": [
      {"role": "user", "content": "What is the capital of France?"}
    ],
    "max_tokens": 100
  }'
```

------