Share via


미세 조정을 사용하여 모델 사용자 지정

Azure OpenAI Service를 사용하면 미세 조정이라는 프로세스를 사용하여 개인 데이터 세트에 맞게 모델을 조정할 수 있습니다. 이 사용자 지정 단계를 통해 다음을 제공하여 서비스를 최대한 활용할 수 있습니다.

  • 프롬프트 엔지니어링에서 얻을 수 있는 것보다 더 높은 품질의 결과
  • 모델의 최대 요청 컨텍스트 제한에 맞을 수 있는 것보다 더 많은 예제를 학습하는 기능입니다.
  • 짧은 프롬프트로 인한 토큰 절약
  • 특히 더 작은 모델을 사용하는 경우 대기 시간 요청이 낮습니다.

퓨샷 학습과 달리 미세 조정은 프롬프트에 맞는 것보다 더 많은 예를 학습하여 모델을 개선하므로 다양한 작업에서 더 나은 결과를 얻을 수 있습니다. 미세 조정은 기본 모델의 가중치를 튜닝하여 특정 작업의 성능을 개선하기 때문에 프롬프트에 많은 예나 지침을 포함할 필요가 없습니다. 따라서 전송되는 텍스트가 감소하고 모든 API 호출에서 처리되는 토큰이 감소하므로 비용이 절감되고 요청 대기 시간이 향상될 수 있습니다.

LoRA(낮은 순위 근사)를 사용하여 성능에 큰 영향을 주지 않으면서 복잡성을 줄이는 방식으로 모델을 미세 조정합니다. 이 방법은 원래의 상위 행렬을 낮은 순위의 행렬로 근사화하여 지도 학습 단계에서 "중요한" 매개 변수의 더 작은 하위 집합만 미세 조정하여 모델을 보다 관리하기 쉽고 효율적으로 만드는 방법으로 작동합니다. 사용자의 경우 이는 다른 기술보다 더 빠르고 저렴한 학습을 제공합니다.

필수 조건

참고 항목

현재 Azure OpenAI Service 에 액세스하려면 신청서를 제출해야 합니다. 액세스를 신청하려면 이 양식을 작성하세요.

모델

다음 모델은 미세 조정을 지원합니다.

  • babbage-002
  • davinci-002
  • gpt-35-turbo(0613)
  • gpt-35-turbo(1106)
  • gpt-35-turbo(0125)
  • gpt-4(0613)

모델 페이지를 참조하여 현재 미세 조정을 지원하는 지역을 확인합니다.

gpt-4를 미세 조정에 사용하려는 경우 GPT-4 공개 미리 보기 안전 평가 지침을 참조하세요.

Azure OpenAI Studio에 대한 워크플로 검토

잠시 시간을 내어 Azure OpenAI Studio를 사용하기 위한 미세 조정 워크플로를 검토하세요.

  1. 학습 및 유효성 검사 데이터를 준비합니다.
  2. Azure OpenAI Studio에서 사용자 지정 모델 만들기 마법사를 사용하여 사용자 지정 모델을 학습시킵니다.
    1. 기본 모델을 선택합니다.
    2. 학습 데이터를 선택합니다.
    3. 필요에 따라 유효성 검사 데이터를 선택합니다.
    4. 필요에 따라 미세 조정 작업의 고급 옵션을 구성합니다.
    5. 선택한 내용을 검토하고 새로운 사용자 지정 모델을 학습시킵니다.
  3. 사용자 지정 미세 조정된 모델의 상태를 확인합니다.
  4. 사용할 사용자 지정 모델을 배포합니다.
  5. 사용자 지정 모델을 사용합니다.
  6. 필요에 따라 사용자 지정 모델의 성능 및 적합성을 분석합니다.

학습 및 유효성 검사 데이터 준비

학습 데이터 및 유효성 검사 데이터 세트는 원하는 모델 성능에 대한 입력 및 출력 예제로 구성됩니다.

모델 유형에 따라 학습 데이터의 형식이 다릅니다.

사용하는 학습 및 유효성 검사 데이터는 반드시 JSONL(JSON Lines) 문서로 서식을 지정해야 합니다. gpt-35-turbo-0613의 경우 세부 조정 데이터 세트는 채팅 완료 API에서 사용하는 대화 형식으로 서식을 지정해야 합니다.

gpt-35-turbo-0613 모델을 미세 조정하는 단계별 연습은 Azure OpenAI 미세 조정 자습서를 참조하세요.

예제 파일 형식

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

멀티 턴 채팅 파일 형식

jsonl 학습 파일의 한 줄에 여러 번 대화하는 것도 지원됩니다. 특정 도우미 메시지에 대한 미세 조정을 건너뛰려면 선택적 weight 키 값 쌍을 추가합니다. 현재 weight는 0 또는 1로 설정할 수 있습니다.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

JSONL 형식 외에도, 학습 및 유효성 검사 데이터 파일은 UTF-8로 인코딩되어야 하고 BOM(바이트 순서 표시)을 포함해야 합니다. 파일 크기는 512MB 미만이어야 합니다.

학습 및 유효성 검사 데이터 세트 만들기

학습 사례가 많을수록 좋습니다. 미세 조정 작업은 최소 10개의 학습 예가 없으면 진행되지 않지만, 그렇게 적은 숫자로는 모델 응답에 눈에 띄게 영향을 미치기에는 충분하지 않습니다. 성공하려면 수천 개는 아니더라도 수백 개의 학습 사례를 제공하는 것이 가장 좋습니다.

일반적으로 데이터 세트 크기가 두 배로 증가할 때마다 모델 품질이 선형적으로 증가할 수 있습니다. 그러나 저품질 예제는 성능에 부정적인 영향을 미칠 수 있습니다. 최고 품질의 예제에 대해서만 데이터 세트를 먼저 정리하지 않고 대량의 내부 데이터에서 모델을 학습하는 경우, 예상보다 훨씬 더 나쁜 성능을 발휘하는 모델이 될 수 있습니다.

사용자 지정 모델 만들기 마법사 사용

Azure OpenAI Studio는 사용자 지정 모델 만들기 마법사를 제공하므로, 대화형으로 Azure 리소스에 대해 미세 조정된 모델을 만들고 학습시킬 수 있습니다.

  1. https://oai.azure.com/에서 Azure OpenAI Studio를 열고 Azure OpenAI 리소스에 액세스할 수 있는 자격 증명으로 로그인합니다. 로그인 워크플로 중에 적절한 디렉터리, Azure 구독 및 Azure OpenAI 리소스를 선택합니다.

  2. Azure OpenAI Studio에서 관리 > 모델 창으로 이동하여 사용자 지정 모델 만들기를 선택합니다.

    Azure OpenAI Studio에서 사용자 지정 모델 만들기 마법사에 액세스하는 방법을 보여 주는 스크린샷

사용자 지정 모델 만들기 마법사가 열립니다.

기본 모델 선택

사용자 지정 모델을 만드는 첫 번째 단계는 기본 모델을 선택하는 것입니다. 기본 모델 창에서 사용자 지정 모델에 사용할 기본 모델을 선택할 수 있습니다. 선택하는 기본 모델은 모델의 성능과 비용 모두에 영향을 줍니다.

기본 모델 유형 드롭다운에서 기본 모델을 선택하고 다음을 선택하여 계속합니다.

사용 가능한 다음 기본 모델 중 하나로 사용자 지정 모델을 만들 수 있습니다.

  • babbage-002

  • davinci-002

  • gpt-35-turbo(0613)

  • gpt-35-turbo(1106)

  • gpt-35-turbo(0125)

  • gpt-4(0613)

  • 또는 이전에 미세 조정된 모델을 base-model.ft-{jobid} 형식으로 미세 조정할 수 있습니다.

사용자 지정 미세 조정 모델이 포함된 모델 옵션의 스크린샷.

미세 조정할 수 있는 기본 모델에 대한 자세한 내용은 모델을 참조하세요.

학습 데이터 선택

다음 단계는 모델을 사용자 지정할 때 사용할 준비된 기존 학습 데이터를 선택하거나 준비된 새 학습 데이터를 업로드하는 것입니다. 학습 데이터 창에는 이전에 업로드한 기존 데이터 세트가 표시되고, 새 학습 데이터를 업로드하는 옵션이 제공됩니다.

Azure OpenAI Studio에서 사용자 지정 모델 만들기 마법사의 학습 데이터 창 스크린샷

대용량 데이터 파일의 경우 Azure Blob 저장소에서 가져오는 것이 좋습니다. 요청이 원자성이어서 다시 시도하거나 다시 시작할 수 없기 때문에 대용량 파일은 멀티파트 양식을 통해 업로드할 때 불안정해질 수 있습니다. Azure Blob Storage에 대한 자세한 내용은 Azure Blob Storage란?을 참조하세요.

참고 항목

학습 데이터 파일은 JSONL 파일로 포맷되고 BOM(바이트 순서 표시)이 있는 UTF-8로 인코딩되어야 합니다. 파일 크기는 512MB 미만이어야 합니다.

로컬 파일에서 학습 데이터 업로드

다음 방법 중 하나를 사용하여 로컬 파일의 새 학습 데이터 세트를 서비스에 업로드할 수 있습니다.

  • 학습 데이터 창의 클라이언트 영역으로 파일을 끌어서 놓은 다음, 파일 업로드를 선택합니다.

  • 학습 데이터 창의 클라이언트 영역에서 파일 찾아보기를 선택하고 열기 대화 상자에서 업로드할 파일을 선택한 다음, 파일 업로드를 선택합니다.

학습 데이터 세트를 선택하고 업로드한 후 다음을 선택하여 계속합니다.

사용자 지정 모델 만들기 마법사의 학습 데이터 창에서 로컬 파일 옵션을 선택한 스크린샷

Azure Blob 저장소에서 학습 데이터 가져오기

파일의 이름과 위치를 입력하여 Azure Blob 또는 다른 공유 웹 위치에서 학습 데이터 세트를 가져올 수 있습니다.

  1. 파일의 파일 이름을 입력합니다.

  2. 파일 위치의 경우 Azure Blob URL, Azure Storage SAS(공유 액세스 서명) 또는 액세스 가능한 공유 웹 위치에 대한 기타 링크를 제공합니다.

  3. 파일 업로드를 선택하여 학습 데이터 세트를 서비스로 가져옵니다.

학습 데이터 세트를 선택하고 업로드한 후 다음을 선택하여 계속합니다.

사용자 지정 모델 만들기 마법사의 학습 데이터 창에서 Azure Blob 및 공유 웹 위치 옵션을 선택한 스크린샷

유효성 검사 데이터 선택

다음 단계에서는 학습 프로세스에서 유효성 검사 데이터를 사용하도록 모델을 구성하는 옵션을 제공합니다. 유효성 검사 데이터를 사용하지 않으려는 경우 다음을 선택하고 모델에 대한 고급 옵션을 선택할 수 있습니다. 사용하려는 경우 유효성 검사 데이터 세트가 있으면 준비된 기존 유효성 검사 데이터를 선택하거나, 모델을 사용자 지정할 때 사용할 새로운 준비된 유효성 검사 데이터를 업로드할 수 있습니다.

유효성 검사 데이터 창에는 이전에 업로드한 기존 데이터 세트가 표시되고, 새 유효성 검사 데이터를 업로드할 수 있는 옵션이 제공됩니다.

Azure OpenAI Studio에서 사용자 지정 모델 만들기 마법사의 유효성 검사 데이터 창 스크린샷

대용량 데이터 파일의 경우 Azure Blob 저장소에서 가져오는 것이 좋습니다. 요청이 원자성이어서 다시 시도하거나 다시 시작할 수 없기 때문에 대용량 파일은 멀티파트 양식을 통해 업로드할 때 불안정해질 수 있습니다.

참고 항목

학습 데이터 파일과 마찬가지로, 유효성 검사 파일은 JSONL 파일로 포맷되고 BOM(바이트 순서 표시)이 있는 UTF-8로 인코딩되어야 합니다. 파일 크기는 512MB 미만이어야 합니다.

로컬 파일에서 유효성 검사 데이터 업로드

다음 방법 중 하나를 사용하여 로컬 파일의 새 유효성 검사 데이터 세트를 서비스에 업로드할 수 있습니다.

  • 유효성 검사 데이터 창의 클라이언트 영역으로 파일을 끌어서 놓은 다음, 파일 업로드를 선택합니다.

  • 유효성 검사 데이터 창의 클라이언트 영역에서 파일 찾아보기를 선택하고 열기 대화 상자에서 업로드할 파일을 선택한 다음, 파일 업로드를 선택합니다.

유효성 검사 데이터 세트를 선택하고 업로드한 후 다음을 선택하여 계속합니다.

사용자 지정 모델 만들기 마법사의 유효성 검사 데이터 창에서 로컬 파일 옵션을 선택한 스크린샷

Azure Blob 저장소에서 유효성 검사 데이터 가져오기

파일의 이름과 위치를 입력하여 Azure Blob 또는 다른 공유 웹 위치에서 유효성 검사 데이터 세트를 가져올 수 있습니다.

  1. 파일의 파일 이름을 입력합니다.

  2. 파일 위치의 경우 Azure Blob URL, Azure Storage SAS(공유 액세스 서명) 또는 액세스 가능한 공유 웹 위치에 대한 기타 링크를 제공합니다.

  3. 파일 업로드를 선택하여 학습 데이터 세트를 서비스로 가져옵니다.

유효성 검사 데이터 세트를 선택하고 업로드한 후 다음을 선택하여 계속합니다.

사용자 지정 모델 만들기 마법사의 유효성 검사 데이터 창에서 Azure Blob 및 공유 웹 위치 옵션을 선택한 스크린샷

고급 옵션 구성

사용자 지정 모델 만들기 마법사는 고급 옵션 창에서 미세 조정된 모델을 학습하기 위한 매개 변수를 표시합니다. 다음 매개 변수를 사용할 수 있습니다.

이름 타입 설명
batch_size 정수 학습에 사용할 일괄 처리 크기입니다. 일괄 처리 크기는 단일 전진 및 후진 계산법을 학습하는 데 사용되는 학습 예의 수입니다. 일반적으로 일괄 처리 크기가 클수록 데이터 세트가 클수록 더 잘 작동하는 경향이 있습니다. 기본값과 이 속성의 최대값은 기본 모델과 관련이 있습니다. 일괄 처리 크기가 클수록 모델 매개 변수는 덜 자주 업데이트되지만 분산은 낮습니다.
learning_rate_multiplier number 학습에 사용할 학습 속도 승수입니다. 미세 조정 학습 속도는 사전 학습에 사용된 원래 학습 속도에 이 값을 곱한 값입니다. 학습률이 클수록 일괄 처리 크기가 클수록 성능이 더 좋은 경향이 있습니다. 0.02에서 0.2 사이의 값으로 실험하여 최상의 결과를 생성하는 값을 확인하는 것이 좋습니다. 학습률이 작을수록 과잉 맞춤을 방지하는 데 유용할 수 있습니다.
n_epochs 정수 모델을 학습할 Epoch의 수입니다. Epoch는 학습 데이터 세트를 통한 하나의 전체 주기를 나타냅니다.
seed 정수 시드는 작업의 재현성을 제어합니다. 동일한 시드 및 작업 매개 변수를 전달하면 동일한 결과가 생성되지만 드문 경우에 다를 수 있습니다. 시드를 지정하지 않으면 시드가 생성됩니다.

사용자 지정 모델 만들기 마법사의 고급 옵션 창에서 기본 옵션을 선택한 스크린샷

기본값을 선택하여 미세 조정 작업의 기본값을 사용하거나, 고급을 선택하여 하이퍼 매개 변수 값을 표시하고 편집합니다. 기본값을 선택하면 학습 데이터를 기반으로 알고리즘적으로 올바른 값을 결정합니다.

고급 옵션을 구성한 후에는 다음을 선택하여 선택한 내용을 검토하고 미세 조정된 모델을 학습시킵니다.

선택한 내용 검토 및 모델 학습

마법사의 검토 창에는 구성 선택에 대한 정보가 표시됩니다.

Azure OpenAI Studio에서 사용자 지정 모델 만들기 마법사의 검토 창 스크린샷

모델을 학습할 준비가 되면 학습 작업 시작을 선택하여 미세 조정 작업을 시작하고 모델 창으로 돌아갑니다.

사용자 지정 모델 상태 확인

모델 창에는 사용자 지정 모델 탭에 사용자 지정 모델에 대한 정보가 표시됩니다. 이 탭에는 사용자 지정 모델에 대한 미세 조정 작업의 상태 및 작업 ID 관련 정보가 포함됩니다. 작업이 완료되면 탭에 결과 파일의 파일 ID가 표시됩니다. 모델 학습 작업에 대한 업데이트된 상태를 보려면 새로 고침을 선택해야 할 수 있습니다.

Azure OpenAI Studio의 모델 페이지에 사용자 지정된 모델이 표시된 스크린샷

미세 조정 작업을 시작한 후 완료하는 데 시간이 걸릴 수 있습니다. 사용자의 작업이 시스템의 다른 작업 뒤에 대기 중일 수 있습니다. 모델 및 데이터 세트 크기에 따라 모델을 학습하는 데 몇 분 또는 몇 시간이 걸릴 수 있습니다.

다음은 모델 창에서 수행할 수 있는 몇 가지 작업입니다.

  • 사용자 지정 모델 탭의 상태 열에서 사용자 지정 모델에 대한 미세 조정 작업의 상태 확인합니다.

  • 모델 이름 열에서 모델 이름을 선택하여 사용자 지정 모델에 대한 자세한 정보를 봅니다. 작업에 사용되는 미세 조정 작업, 학습 결과, 학습 이벤트 및 하이퍼 매개 변수의 상태를 확인할 수 있습니다.

  • 학습 파일 다운로드를 선택하여 모델에 사용한 학습 데이터를 다운로드합니다.

  • 결과 다운로드를 선택하여 모델의 미세 조정 작업에 연결된 결과 파일을 다운로드하고 사용자 지정 모델의 학습 및 유효성 검사 성능을 분석할 수도 있습니다.

  • 새로 고침을 선택하여 페이지의 정보를 업데이트합니다.

Azure OpenAI Studio의 모델 페이지에 사용자 지정된 모델이 표시된 스크린샷

안전 평가 GPT-4 미세 조정 - 공개 미리 보기

GPT-4는 사용자의 요구 사항에 맞게 미세 조정할 수 있는 가장 고급 모델입니다. 일반적으로 Azure OpenAI 모델과 마찬가지로 미세 조정된 모델의 고급 기능에는 유해한 콘텐츠, 조작, 인간과 유사한 동작, 개인 정보 보호 문제 등과 관련된 책임감 있는 AI가 해결해야 할 문제가 증가합니다. 책임감 있는 AI 사례투명성 고지에서 위험, 기능, 제한 사항에 대해 자세히 알아봅니다. GPT-4 미세 조정된 모델과 관련된 위험을 완화하기 위해 미세 조정된 모델의 학습 및 출력에서 유해한 콘텐츠를 감지하고 방지하는 데 도움이 되는 추가 평가 단계를 구현했습니다. 이러한 단계는 Microsoft의 책임감 있는 AI 표준Azure OpenAI 서비스 콘텐츠 필터링에 근거합니다.

  • 평가는 전용 고객별 프라이빗 작업 영역에서 수행됩니다.
  • 평가 엔드포인트는 Azure OpenAI 리소스와 동일한 지역에 있습니다.
  • 학습 데이터는 평가 수행과 관련하여 저장되지 않으며, 최종 모델 평가(배포 가능 또는 배포 불가능)만 유지됩니다.

GPT-4 미세 조정된 모델 평가 필터는 미리 정의된 임계값으로 설정되며 고객이 수정할 수 없습니다. 사용자가 만들었을 수 있는 사용자 지정 콘텐츠 필터링 구성에 연결되지 않습니다.

데이터 평가

학습이 시작되기 전에 잠재적으로 유해한 콘텐츠(폭력, 성적인 내용, 혐오, 공정성, 자해 등, 여기에서 범주 정의 참조)가 있는지 데이터를 평가합니다. 지정된 심각도 수준 이상으로 유해한 콘텐츠가 감지되면 학습 작업이 실패하고 실패 범주를 알리는 메시지가 표시됩니다.

샘플 메시지:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

학습 데이터는 미세 조정 기능을 제공하는 일환으로 데이터 가져오기 작업 내에서 자동으로 평가됩니다.

학습 데이터의 유해한 콘텐츠가 감지되어 미세 조정 작업이 실패하는 경우 요금이 청구되지 않습니다.

모델 평가

학습이 완료되었지만 미세 조정된 모델을 배포할 수 있기 전에, 결과 모델은 Azure의 기본 제공 위험 및 안전 메트릭을 사용하여 잠재적으로 유해한 대응에 대해 평가됩니다. 기본 대형 언어 모델에 사용하는 테스트와 동일한 접근 방식을 사용하여 평가 기능은 지정된 유해한 콘텐츠 범주(폭력, 성적인 내용, 혐오, 공정성, 자해)를 사용하여 유해한 콘텐츠를 출력할 가능성을 평가하기 위해 미세 조정된 모델과의 대화를 시뮬레이션합니다.

허용 가능한 비율 이상으로 유해한 것으로 감지된 콘텐츠를 포함하는 출력을 모델이 생성하는 것으로 확인되면 배포에 해당 모델을 사용할 수 없다는 알림이 표시되고 특정 범주의 피해에 대한 정보가 표시됩니다.

샘플 메시지:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

안전성 평가로 인해 실패한 미세 조정 작업의 스크린샷

데이터 평가와 마찬가지로 모델은 미세 조정 기능 제공의 일환으로 미세 조정 작업 내에서 자동으로 평가됩니다. 결과 평가(배포 가능 또는 배포 불가능)만 서비스에서 기록합니다. 모델 출력에서 유해한 콘텐츠가 감지되어 미세 조정된 모델의 배포가 실패하는 경우 학습 실행에 대한 요금이 청구되지 않습니다.

사용자 지정 모델 배포

미세 조정 작업이 성공하면 모델 창에서 사용자 지정 모델을 배포할 수 있습니다. 완료 호출에 사용할 수 있도록 사용자 지정 모델을 배포해야 합니다.

Important

사용자 지정된 모델을 배포한 후 언제든지 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델이 배포된 지 15일이 넘었고 연속 15일 동안 모델에 대한 완료 또는 채팅 완료 호출이 이루어지지 않은 경우 맞춤형 모델 배포는 비활성 상태입니다.

비활성 배포를 삭제해도 기본 사용자 지정 모델은 삭제되거나 영향을 받지 않으며 사용자 지정 모델은 언제든지 다시 배포될 수 있습니다. Azure OpenAI Service 가격 책정에 설명된 대로 배포되는 각 사용자 지정(세밀 조정) 모델에는 완료 또는 채팅 완료 호출이 모델에 대해 수행되는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI Service 비용 관리 계획의 지침을 참조하세요.

참고 항목

하나의 사용자 지정 모델에는 하나의 배포만 허용됩니다. 이미 배포된 사용자 지정 모델을 선택하면 오류 메시지가 표시됩니다.

사용자 지정 모델을 배포하려면 배포할 사용자 지정 모델을 선택한 다음, 모델 배포를 선택합니다.

Azure OpenAI Studio에서 사용자 지정 모델을 배포하는 방법을 보여 주는 스크린샷

모델 배포 대화 상자가 열립니다. 대화 상자의 배포 이름에 이름을 입력한 다음, 만들기를 선택하여 사용자 지정 모델의 배포를 시작합니다.

Azure OpenAI Studio의 모델 배포 대화 상자 스크린샷

Azure OpenAI Studio의 배포 창에서 배포 진행률을 모니터링할 수 있습니다.

지역 간 배포

미세 조정은 모델이 원래 미세 조정된 지역과 다른 지역에 미세 조정된 모델을 배포하도록 지원합니다. 다른 구독/지역에 배포할 수도 있습니다.

유일한 제한 사항은 새 지역이 미세 조정도 지원해야 하며, 교차 구독을 배포할 때 배포에 대한 권한 부여 토큰을 생성하는 계정에는 원본 및 대상 구독 모두에 대한 액세스 권한이 있어야 한다는 것입니다.

구독/지역 간 배포는 Python 또는 REST를 통해 수행할 수 있습니다.

배포된 사용자 지정 모델 사용

사용자 지정 모델이 배포되었으면 배포된 다른 모델처럼 사용할 수 있습니다. Azure OpenAI Studio플레이그라운드를 사용하여 새 배포로 실험해볼 수 있습니다. 배포된 다른 모델과 마찬가지로 사용자 지정 모델에서 temperaturemax_tokens와 같은 동일한 매개 변수를 계속 사용할 수 있습니다. 미세 조정된 babbage-002 모델 및 davinci-002 모델의 경우 완료 플레이그라운드 및 완료 API를 사용합니다. 미세 조정된 gpt-35-turbo-0613 모델의 경우 채팅 플레이그라운드 및 채팅 완료 API를 사용합니다.

Azure OpenAI Studio의 플레이그라운드 창에서 여러 섹션이 강조 표시된 스크린샷

사용자 지정 모델 분석

미세 조정 작업이 완료되면 Azure OpenAI는 results.csv라는 결과 파일을 각 미세 조정 작업에 연결합니다. 이 결과 파일을 사용하여 사용자 지정 모델의 학습 및 유효성 검사 성능을 분석할 수 있습니다. Azure OpenAI Studio 모델 창의 결과 파일 ID 열에 각 사용자 지정 모델에 대한 결과 파일의 파일 ID가 나열됩니다. 이 파일 ID를 사용하여 Azure OpenAI Studio의 데이터 파일 창에서 결과 파일을 식별하고 다운로드할 수 있습니다.

결과 파일은 미세 조정 작업에서 수행하는 각 학습 단계에 대한 머리글 행과 행을 포함하는 CSV 파일입니다. 결과 파일에는 다음 열이 포함되어 있습니다.

열 이름 설명
step 학습 단계의 수입니다. 학습 단계는 학습 데이터 일괄 처리에 대한 정방향 및 역방향 단일 패스를 나타냅니다.
train_loss 학습 일괄 처리의 손실입니다.
train_mean_token_accuracy 모델에서 올바르게 예측한 학습 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
valid_loss 유효성 검사 일괄 처리의 손실입니다.
validation_mean_token_accuracy 모델에서 올바르게 예측한 유효성 검사 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
full_valid_loss 각 epoch의 끝에서 계산된 유효성 검사 손실입니다. 학습이 잘되면 손실이 줄어들 것입니다.
full_valid_mean_token_accuracy 각 epoch의 끝에서 계산된 유효한 평균 토큰 정확도입니다. 학습이 잘 진행되면 토큰 정확도가 높아져야 합니다.

Azure OpenAI Studio에서 results.csv 파일의 데이터를 플롯으로 볼 수도 있습니다. 학습된 모델에 대한 링크를 선택하면 손실, 평균 토큰 정확도 및 토큰 정확도의 세 가지 차트가 표시됩니다. 유효성 검사 데이터를 제공한 경우 두 데이터 세트가 모두 동일한 플롯에 나타납니다.

시간이 지남에 따라 손실이 감소하고 정확도가 증가하는지 확인합니다. 학습 데이터와 유효성 검사 데이터 사이에 차이가 있는 경우 이는 과잉 맞춤을 의미할 수 있습니다. 더 적은 epoch 또는 더 작은 학습 속도 승수를 사용하여 학습을 시도합니다.

배포, 사용자 지정 모델 및 학습 파일 정리

사용자 지정 모델을 완료했으면 배포 및 모델을 삭제해도 됩니다. 원한다면 서비스에 업로드한 학습 및 유효성 검사 파일까지 삭제해도 됩니다.

모델 배포 삭제

Important

사용자 지정된 모델을 배포한 후 언제든지 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델이 배포된 지 15일이 넘었고 연속 15일 동안 모델에 대한 완료 또는 채팅 완료 호출이 이루어지지 않은 경우 맞춤형 모델 배포는 비활성 상태입니다.

비활성 배포를 삭제해도 기본 사용자 지정 모델은 삭제되거나 영향을 받지 않으며 사용자 지정 모델은 언제든지 다시 배포될 수 있습니다. Azure OpenAI Service 가격 책정에 설명된 대로 배포되는 각 사용자 지정(세밀 조정) 모델에는 완료 또는 채팅 완료 호출이 모델에 대해 수행되는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI Service 비용 관리 계획의 지침을 참조하세요.

Azure OpenAI Studio의 배포 창에서 사용자 지정 모델의 배포를 삭제할 수 있습니다. 삭제할 배포를 선택한 다음, 삭제를 선택하여 배포를 삭제합니다.

사용자 지정 모델 삭제

Azure OpenAI Studio의 모델 창에서 사용자 지정 모델을 삭제할 수 있습니다. 사용자 지정 모델 탭에서 삭제할 사용자 지정 모델을 선택한 다음, 삭제를 선택하여 사용자 지정 모델을 삭제합니다.

참고 항목

기존 배포가 있는 사용자 지정 모델은 삭제할 수 없습니다. 사용자 지정 모델을 삭제하려면 모델 배포부터 삭제해야 합니다.

학습 파일 삭제

필요에 따라 Azure OpenAI Studio의 관리>데이터 파일 창에서 학습을 위해 업로드한 학습 및 유효성 검사 파일과 학습 중에 생성된 결과 파일을 삭제할 수 있습니다. 삭제할 파일을 선택한 다음, 삭제를 선택하여 파일을 삭제합니다.

연속 미세 조정

미세 조정된 모델을 만든 후에는 추가 미세 조정을 통해 시간이 지남에 따라 모델을 계속 구체화할 수 있습니다. 지속적인 미세 조정은 이미 미세 조정된 모델을 기본 모델로 선택하고 새로운 학습 예제 집합에서 추가로 미세 조정하는 반복적인 프로세스입니다.

이전에 미세 조정한 모델에 대해 미세 조정을 수행하려면 사용자 지정 모델 만들기에 설명된 것과 동일한 프로세스를 사용하지만 일반 기본 모델의 이름을 지정하는 대신 이미 미세 조정된 모델을 지정합니다. 사용자 지정 미세 조정된 모델은 gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7과(와) 같습니다.

미세 조정된 모델이 강조 표시된 사용자 지정 모델 만들기 UI의 스크린샷.

또한 suffix 매개 변수를 포함하여 미세 조정된 모델의 여러 반복을 더 쉽게 구분할 수 있도록 하는 것이 좋습니다. suffix은(는) 문자열을 사용하고 미세 조정된 모델을 식별하도록 설정됩니다. OpenAI Python API를 사용하면 미세 조정된 모델 이름에 추가될 최대 18자의 문자열이 지원됩니다.

Important

이 문서에 설명된 기능 중 일부는 미리 보기로만 제공될 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

필수 조건

참고 항목

현재 Azure OpenAI Service 에 액세스하려면 신청서를 제출해야 합니다. 액세스를 신청하려면 이 양식을 작성하세요.

모델

다음 모델은 미세 조정을 지원합니다.

  • babbage-002
  • davinci-002
  • gpt-35-turbo(0613)
  • gpt-35-turbo(1106)
  • gpt-35-turbo(0125)
  • gpt-4(0613)

모델 페이지를 참조하여 현재 미세 조정을 지원하는 지역을 확인합니다.

gpt-4를 미세 조정에 사용하려는 경우 GPT-4 공개 미리 보기 안전 평가 지침을 참조하세요.

Azure AI Studio를 위한 워크플로 검토

잠시 시간을 내어 Azure AI Studio를 사용하기 위한 미세 조정 워크플로를 검토하세요.

  1. 학습 및 유효성 검사 데이터를 준비합니다.
  2. Azure AI Studio에서 모델 미세 조정 마법사를 사용하여 사용자 지정 모델을 학습시킵니다.
    1. 모델을 선택합니다.
    2. 학습 데이터를 선택합니다.
    3. 필요에 따라 유효성 검사 데이터를 선택합니다.
    4. 필요에 따라 미세 조정 작업의 매개 변수를 구성합니다.
    5. 선택한 내용을 검토하고 새로운 사용자 지정 모델을 학습시킵니다.
  3. 미세 조정된 모델의 상태를 확인합니다.
  4. 필요에 따라 성능과 적합성을 위해 미세 조정된 모델을 분석합니다.
  5. 사용할 미세 조정된 모델을 배포합니다.
  6. 미세 조정된 모델을 사용합니다.

학습 및 유효성 검사 데이터 준비

학습 데이터 및 유효성 검사 데이터 세트는 원하는 모델 성능에 대한 입력 및 출력 예제로 구성됩니다.

모델 유형에 따라 학습 데이터의 형식이 다릅니다.

사용하는 학습 및 유효성 검사 데이터는 반드시 JSONL(JSON Lines) 문서로 서식을 지정해야 합니다. gpt-35-turbo-0613의 경우 세부 조정 데이터 세트는 채팅 완료 API에서 사용하는 대화 형식으로 서식을 지정해야 합니다.

gpt-35-turbo-0613 모델을 미세 조정하는 단계별 연습은 Azure OpenAI 미세 조정 자습서를 참조하세요.

예제 파일 형식

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

멀티 턴 채팅 파일 형식

jsonl 학습 파일의 한 줄에 여러 번 대화하는 것도 지원됩니다. 특정 도우미 메시지에 대한 미세 조정을 건너뛰려면 선택적 weight 키 값 쌍을 추가합니다. 현재 weight는 0 또는 1로 설정할 수 있습니다.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

JSONL 형식 외에도, 학습 및 유효성 검사 데이터 파일은 UTF-8로 인코딩되어야 하고 BOM(바이트 순서 표시)을 포함해야 합니다. 파일 크기는 512MB 미만이어야 합니다.

학습 및 유효성 검사 데이터 세트 만들기

학습 사례가 많을수록 좋습니다. 미세 조정 작업은 최소 10개의 학습 예가 없으면 진행되지 않지만, 그렇게 적은 숫자로는 모델 응답에 눈에 띄게 영향을 미치기에는 충분하지 않습니다. 성공하려면 수천 개는 아니더라도 수백 개의 학습 사례를 제공하는 것이 가장 좋습니다.

일반적으로 데이터 세트 크기가 두 배로 증가할 때마다 모델 품질이 선형적으로 증가할 수 있습니다. 그러나 저품질 예제는 성능에 부정적인 영향을 미칠 수 있습니다. 최고 품질의 예제에 대해서만 데이터 세트를 먼저 정리하지 않고 대량의 내부 데이터에서 모델을 학습하는 경우, 예상보다 훨씬 더 나쁜 성능을 발휘하는 모델이 될 수 있습니다.

미세 조정된 모델 만들기

기존 Azure AI 스튜디오 프로젝트에서 Azure OpenAI 모델을 미세 조정하려면 다음 단계를 수행합니다.

  1. Azure AI 스튜디오에 로그인하고 프로젝트를 선택합니다. 프로젝트가 아직 없다면 먼저 프로젝트를 만듭니다.

  2. 축소 가능한 왼쪽 메뉴에서 미세 조정>+ 미세 조정 모델을 선택합니다.

    미세 조정된 새 모델 만들기를 시작하는 옵션의 스크린샷.

기본 모델 선택

  1. 기본 모델을 선택하여 미세 조정합니다. 선택하는 기본 모델은 모델의 성능과 비용 모두에 영향을 줍니다. 이 예제에서는 gpt-35-turbo 모델을 선택합니다. 그런 다음 확인을 선택합니다.

    미세 조정할 모델을 선택하는 옵션의 스크린샷.

  2. gpt-35-turbo의 경우 미세 조정에 사용할 수 있는 버전이 다르므로 미세 조정하려는 버전을 선택하세요. 우리는 (0301)를 선택할 것입니다.

  3. 또한 suffix 매개 변수를 포함하여 미세 조정된 모델의 여러 반복을 더 쉽게 구분할 수 있도록 하는 것이 좋습니다. suffix은(는) 문자열을 사용하고 미세 조정된 모델을 식별하도록 설정됩니다. OpenAI Python API를 사용하면 미세 조정된 모델 이름에 추가될 최대 18자의 문자열이 지원됩니다.

미세 조정을 위해 둘 이상의 Azure OpenAI 연결을 사용하도록 설정한 경우 사용할 리소스를 선택합니다. Azure OpenAI 리소스에 액세스할 수 있는 모든 사용자는 이 미세 조정된 모델에 액세스할 수 있습니다.

  1. 그런 후 다음을 선택합니다.

    모델을 미세 조정하기 위한 기본 설정의 스크린샷.

학습 데이터 선택

다음 단계는 모델을 사용자 지정할 때 사용할 준비된 기존 학습 데이터를 선택하거나 준비된 새 학습 데이터를 업로드하는 것입니다. 학습 데이터 창에는 이전에 업로드한 기존 데이터 세트가 표시되고, 새 학습 데이터를 업로드하는 옵션이 제공됩니다.

Azure AI Studio의 모델 미세 조정 마법사에 대한 학습 데이터 창의 스크린샷.

  • 학습 데이터가 프로젝트에 이미 있는 경우 Azure AI Studio 내 데이터를 선택합니다.

    • 학습 데이터 창에 표시된 목록에서 파일을 선택합니다.
  • 학습 데이터가 이미 Azure OpenAI 서비스에 업로드되어 있는 경우 Azure OpenAI 연결에서 Azure OpenAI 연결을 선택합니다.

  • 학습 데이터를 업로드하여 모델을 미세 조정하려면 데이터 업로드를 선택한 다음 파일 업로드를 선택합니다.

    • 모든 학습 예제가 예상 유추 형식을 따르는지 확인합니다. 모델을 효과적으로 미세 조정하려면 데이터 세트가 균형 잡히고 다양해야 합니다. 여기에는 다양한 시나리오를 포함한 데이터 균형을 유지하고, 실제 기대에 맞게 학습 데이터를 주기적으로 구체화하고, 궁극적으로 보다 정확하고 균형 잡힌 모델 응답을 이끌어내는 작업이 포함됩니다. 자세한 내용은 데이터 준비를 참조하세요.
    • 대용량 데이터 파일의 경우 Azure Blob 저장소에서 가져오는 것이 좋습니다. 요청이 원자성이어서 다시 시도하거나 다시 시작할 수 없기 때문에 대용량 파일은 멀티파트 양식을 통해 업로드할 때 불안정해질 수 있습니다. Azure Blob Storage에 대한 자세한 내용은 Azure Blob Storage란?을 참조하세요.

참고 항목

학습 데이터 파일은 JSONL 파일로 포맷되고 BOM(바이트 순서 표시)이 있는 UTF-8로 인코딩되어야 합니다. 파일 크기는 512MB 미만이어야 합니다.

학습 데이터를 로컬로 업로드하는 옵션의 스크린샷.

파일을 업로드하면 학습 데이터의 미리 보기가 표시됩니다. 다음을 선택하여 작업을 계속할 수 있습니다.

학습 데이터 미리 보기의 스크린샷.

유효성 검사 데이터 선택

필요에 따라 유효성 검사 데이터를 제공하여 모델을 미세 조정하도록 선택할 수 있습니다. 유효성 검사 데이터를 사용하지 않으려면 없음을 선택하고 다음을 선택하여 모델에 대한 고급 옵션을 계속 진행할 수 있습니다.

그렇지 않으면 유효성 검사 데이터 세트가 있는 경우 이전에 업로드한 데이터 중에서 선택하거나 모델을 미세 조정하는 데 사용할 새로 준비된 유효성 검사 데이터를 업로드할 수 있습니다.

참고 항목

학습 데이터 파일과 마찬가지로, 유효성 검사 파일은 JSONL 파일로 포맷되고 BOM(바이트 순서 표시)이 있는 UTF-8로 인코딩되어야 합니다. 파일 크기는 512MB 미만이어야 합니다.

매개 변수 구성

필요에 따라 미세 조정 작업에 대한 매개 변수를 구성합니다. 다음을 사용할 수 있습니다.

이름 타입 설명
batch_size 정수 학습에 사용할 일괄 처리 크기입니다. 일괄 처리 크기는 단일 전진 및 후진 계산법을 학습하는 데 사용되는 학습 예의 수입니다. 일반적으로 일괄 처리 크기가 클수록 데이터 세트가 클수록 더 잘 작동하는 경향이 있습니다. 기본값과 이 속성의 최대값은 기본 모델과 관련이 있습니다. 일괄 처리 크기가 클수록 모델 매개 변수는 덜 자주 업데이트되지만 분산은 낮습니다. -1로 설정하면 batch_size가 학습 집합에서 예제의 0.2%로 계산되고 최대값은 256입니다.
learning_rate_multiplier 번호 학습에 사용할 학습 속도 승수입니다. 미세 조정 학습 속도는 사전 학습에 사용된 원래 학습 속도에 이 값을 곱한 값입니다. 학습률이 클수록 일괄 처리 크기가 클수록 성능이 더 좋은 경향이 있습니다. 0.02에서 0.2 사이의 값으로 실험하여 최상의 결과를 생성하는 값을 확인하는 것이 좋습니다. 학습률이 작을수록 과잉 맞춤을 방지하는 데 유용할 수 있습니다.
n_epochs 정수 모델을 학습할 Epoch의 수입니다. Epoch는 학습 데이터 세트를 통한 하나의 전체 주기를 나타냅니다. -1로 설정하면 입력 데이터에 따라 epoch 수가 동적으로 결정됩니다.
seed 정수 시드는 작업의 재현성을 제어합니다. 동일한 시드 및 작업 매개 변수를 전달하면 동일한 결과가 생성되지만 드문 경우에 다를 수 있습니다. 시드를 지정하지 않으면 시드가 생성됩니다.

기본 구성을 그대로 두거나 기본 설정에 맞게 값을 사용자 지정할 수 있습니다. 구성을 완료한 후 다음을 선택합니다.

선택한 내용 검토 및 모델 학습

선택 사항을 검토하고 제출을 선택하여 새 미세 조정된 모델 학습을 시작합니다.

미세 조정된 모델의 상태 확인

미세 조정 작업을 제출하면 미세 조정된 모델에 대한 세부 정보가 포함된 페이지가 표시됩니다. Azure AI Studio의 미세 조정>모델 페이지에서 세부 조정된 모델에 대한 상태 및 자세한 정보를 확인할 수 있습니다.

사용자의 작업이 시스템의 다른 작업 뒤에 대기 중일 수 있습니다. 모델 및 데이터 세트 크기에 따라 모델을 학습하는 데 몇 분 또는 몇 시간이 걸릴 수 있습니다.

미세 조정된 모델 분석

미세 조정이 성공적으로 완료되면 세부 정보 탭 아래의 미세 조정된 모델 페이지에서 results.csv 이라는 결과 파일을 다운로드할 수 있습니다. 이 결과 파일을 사용하여 사용자 지정 모델의 학습 및 유효성 검사 성능을 분석할 수 있습니다.

결과 파일은 미세 조정 작업에서 수행하는 각 학습 단계에 대한 머리글 행과 행을 포함하는 CSV 파일입니다. 결과 파일에는 다음 열이 포함되어 있습니다.

열 이름 설명
step 학습 단계의 수입니다. 학습 단계는 학습 데이터 일괄 처리에 대한 정방향 및 역방향 단일 패스를 나타냅니다.
train_loss 학습 일괄 처리의 손실입니다.
train_mean_token_accuracy 모델에서 올바르게 예측한 학습 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
valid_loss 유효성 검사 일괄 처리의 손실입니다.
validation_mean_token_accuracy 모델에서 올바르게 예측한 유효성 검사 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
full_valid_loss 각 epoch의 끝에서 계산된 유효성 검사 손실입니다. 학습이 잘되면 손실이 줄어들 것입니다.
full_valid_mean_token_accuracy 각 epoch의 끝에서 계산된 유효한 평균 토큰 정확도입니다. 학습이 잘 진행되면 토큰 정확도가 높아져야 합니다.

results.csv 파일의 데이터를 미세 조정된 모델의 메트릭 탭 아래의 Azure AI Studio에서 플롯으로 볼 수도 있습니다. 학습된 모델에 대한 링크를 선택하면 손실, 평균 토큰 정확도 및 토큰 정확도의 세 가지 차트가 표시됩니다. 유효성 검사 데이터를 제공한 경우 두 데이터 세트가 모두 동일한 플롯에 나타납니다.

시간이 지남에 따라 손실이 감소하고 정확도가 증가하는지 확인합니다. 학습 데이터와 유효성 검사 데이터 사이에 차이가 있는 경우 이는 과잉 맞춤을 의미할 수 있습니다. 더 적은 epoch 또는 더 작은 학습 속도 승수를 사용하여 학습을 시도합니다.

안전 평가 GPT-4 미세 조정 - 공개 미리 보기

GPT-4는 사용자의 요구 사항에 맞게 미세 조정할 수 있는 가장 고급 모델입니다. 일반적으로 Azure OpenAI 모델과 마찬가지로 미세 조정된 모델의 고급 기능에는 유해한 콘텐츠, 조작, 인간과 유사한 동작, 개인 정보 보호 문제 등과 관련된 책임감 있는 AI가 해결해야 할 문제가 증가합니다. 책임감 있는 AI 사례투명성 고지에서 위험, 기능, 제한 사항에 대해 자세히 알아봅니다. GPT-4 미세 조정된 모델과 관련된 위험을 완화하기 위해 미세 조정된 모델의 학습 및 출력에서 유해한 콘텐츠를 감지하고 방지하는 데 도움이 되는 추가 평가 단계를 구현했습니다. 이러한 단계는 Microsoft의 책임감 있는 AI 표준Azure OpenAI 서비스 콘텐츠 필터링에 근거합니다.

  • 평가는 전용 고객별 프라이빗 작업 영역에서 수행됩니다.
  • 평가 엔드포인트는 Azure OpenAI 리소스와 동일한 지역에 있습니다.
  • 학습 데이터는 평가 수행과 관련하여 저장되지 않으며, 최종 모델 평가(배포 가능 또는 배포 불가능)만 유지됩니다.

GPT-4 미세 조정된 모델 평가 필터는 미리 정의된 임계값으로 설정되며 고객이 수정할 수 없습니다. 사용자가 만들었을 수 있는 사용자 지정 콘텐츠 필터링 구성에 연결되지 않습니다.

데이터 평가

학습이 시작되기 전에 잠재적으로 유해한 콘텐츠(폭력, 성적인 내용, 혐오, 공정성, 자해 등, 여기에서 범주 정의 참조)가 있는지 데이터를 평가합니다. 지정된 심각도 수준 이상으로 유해한 콘텐츠가 감지되면 학습 작업이 실패하고 실패 범주를 알리는 메시지가 표시됩니다.

샘플 메시지:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

학습 데이터는 미세 조정 기능을 제공하는 일환으로 데이터 가져오기 작업 내에서 자동으로 평가됩니다.

학습 데이터의 유해한 콘텐츠가 감지되어 미세 조정 작업이 실패하는 경우 요금이 청구되지 않습니다.

모델 평가

학습이 완료되었지만 미세 조정된 모델을 배포할 수 있기 전에, 결과 모델은 Azure의 기본 제공 위험 및 안전 메트릭을 사용하여 잠재적으로 유해한 대응에 대해 평가됩니다. 기본 대형 언어 모델에 사용하는 테스트와 동일한 접근 방식을 사용하여 평가 기능은 지정된 유해한 콘텐츠 범주(폭력, 성적인 내용, 혐오, 공정성, 자해)를 사용하여 유해한 콘텐츠를 출력할 가능성을 평가하기 위해 미세 조정된 모델과의 대화를 시뮬레이션합니다.

허용 가능한 비율 이상으로 유해한 것으로 감지된 콘텐츠를 포함하는 출력을 모델이 생성하는 것으로 확인되면 배포에 해당 모델을 사용할 수 없다는 알림이 표시되고 특정 범주의 피해에 대한 정보가 표시됩니다.

샘플 메시지:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

안전성 평가로 인해 실패한 미세 조정 작업의 스크린샷

데이터 평가와 마찬가지로 모델은 미세 조정 기능 제공의 일환으로 미세 조정 작업 내에서 자동으로 평가됩니다. 결과 평가(배포 가능 또는 배포 불가능)만 서비스에서 기록합니다. 모델 출력에서 유해한 콘텐츠가 감지되어 미세 조정된 모델의 배포가 실패하는 경우 학습 실행에 대한 요금이 청구되지 않습니다.

미세 조정된 모델 배포

모델이 미세 조정되면 모델을 배포하고 자체 애플리케이션에서 사용할 수 있습니다. Azure AI 스튜디오의 배포 페이지 또는 플레이그라운드 페이지에서는 미세 조정된 모델을 배포할 수 없습니다. 현재 미세 조정된 모델을 배포하는 유일한 방법은 해당 모델의 모델 세부 정보 페이지를 이용하는 것입니다.

모델을 배포할 때 모델을 추론할 수 있도록 설정하면 시간당 호스팅 요금이 부과됩니다. 하지만 미세 조정된 모델은 사용할 준비가 될 때까지 Azure AI Studio에 무료로 저장할 수 있습니다.

Important

사용자 지정된 모델을 배포한 후 언제든지 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델이 배포된 지 15일이 넘었고 연속 15일 동안 모델에 대한 완료 또는 채팅 완료 호출이 이루어지지 않은 경우 맞춤형 모델 배포는 비활성 상태입니다.

비활성 배포를 삭제해도 기본 사용자 지정 모델은 삭제되거나 영향을 받지 않으며 사용자 지정 모델은 언제든지 다시 배포될 수 있습니다. Azure OpenAI Service 가격 책정에 설명된 대로 배포되는 각 사용자 지정(세밀 조정) 모델에는 완료 또는 채팅 완료 호출이 모델에 대해 수행되는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI Service 비용 관리 계획의 지침을 참조하세요.

참고 항목

미세 조정된 모델에는 배포가 한 번만 허용됩니다. 이미 배포된 미세 조정된 모델을 선택하면 오류 메시지가 표시됩니다.

Azure AI Studio의 배포 페이지에서 배포 진행률을 모니터링할 수 있습니다.

배포된 미세 조정된 모델 사용

미세 조정된 모델이 배포되었으면 배포된 다른 모델처럼 사용할 수 있습니다. Azure AI Studio플레이그라운드를 사용하여 새 배포로 실험해볼 수 있습니다. REST API를 사용하여 자체 애플리케이션에서 미세 조정된 모델을 호출할 수도 있습니다. 프롬프트 흐름에서 이 새로운 미세 조정 모델을 사용하여 생성형 AI 애플리케이션을 구축할 수도 있습니다.

참고 항목

채팅 모델의 경우, 미세 조정된 모델을 안내하는 데 사용하는 시스템 메시지(배포되었거나 플레이그라운드에서 테스트할 수 있는지 여부)는 학습에 사용한 시스템 메시지와 동일해야 합니다. 다른 시스템 메시지를 사용하는 경우 모델이 예상대로 작동하지 않을 수 있습니다.

배포, 미세 조정된 모델 및 학습 파일 정리

미세 조정된 모델을 완료하면 배포 및 모델을 삭제할 수 있습니다. 원한다면 서비스에 업로드한 학습 및 유효성 검사 파일까지 삭제해도 됩니다.

미세 조정된 모델 배포 삭제

Important

사용자 지정된 모델을 배포한 후 언제든지 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델이 배포된 지 15일이 넘었고 연속 15일 동안 모델에 대한 완료 또는 채팅 완료 호출이 이루어지지 않은 경우 맞춤형 모델 배포는 비활성 상태입니다.

비활성 배포를 삭제해도 기본 사용자 지정 모델은 삭제되거나 영향을 받지 않으며 사용자 지정 모델은 언제든지 다시 배포될 수 있습니다. Azure OpenAI Service 가격 책정에 설명된 대로 배포되는 각 사용자 지정(세밀 조정) 모델에는 완료 또는 채팅 완료 호출이 모델에 대해 수행되는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI Service 비용 관리 계획의 지침을 참조하세요.

Azure AI Studio의 배포 페이지에서 미세 조정된 모델에 대한 배포를 삭제할 수 있습니다. 삭제할 배포를 선택한 다음, 삭제를 선택하여 배포를 삭제합니다.

미세 조정된 모델 삭제

Azure AI Studio의 미세 조정 페이지에서 미세 조정된 모델을 삭제할 수 있습니다. 삭제할 미세 조정된 모델을 선택한 다음 삭제를 선택하여 미세 조정된 모델을 삭제합니다.

참고 항목

미세 조정된 모델에 기존 배포가 있는 경우에는 삭제할 수 없습니다. 미세 조정된 모델을 삭제하려면 모델 배포부터 삭제해야 합니다.

학습 파일 삭제

필요에 따라 학습을 위해 업로드한 학습 및 유효성 검사 파일과 학습 중에 생성된 결과 파일을 삭제할 수 있습니다. 이를 위해 Azure OpenAI Studio로 이동하여 관리>데이터 파일 창으로 이동해야 합니다. 삭제할 파일을 선택한 다음, 삭제를 선택하여 파일을 삭제합니다.

필수 조건

참고 항목

현재 Azure OpenAI Service 에 액세스하려면 신청서를 제출해야 합니다. 액세스를 신청하려면 이 양식을 작성하세요.

모델

다음 모델은 미세 조정을 지원합니다.

  • babbage-002
  • davinci-002
  • gpt-35-turbo(0613)
  • gpt-35-turbo(1106)
  • gpt-35-turbo(0125)
  • gpt-4(0613)

gpt-4를 미세 조정에 사용하려는 경우 GPT-4 공개 미리 보기 안전 평가 지침을 참조하세요.

또는 이전에 미세 조정된 모델을 base-model.ft-{jobid} 형식으로 미세 조정할 수 있습니다.

사용자 지정 미세 조정 모델이 포함된 모델 옵션의 스크린샷.

모델 페이지를 참조하여 현재 미세 조정을 지원하는 지역을 확인합니다.

Python SDK에 대한 워크플로 검토

잠시 시간을 내어 Azure OpenAI에서 Python SDK를 사용하기 위한 미세 조정 워크플로를 검토하세요.

  1. 학습 및 유효성 검사 데이터를 준비합니다.
  2. 기본 모델을 선택합니다.
  3. 학습 데이터를 업로드합니다.
  4. 새 사용자 지정 모델을 학습시킵니다.
  5. 사용자 지정 모델의 상태를 확인합니다.
  6. 사용할 사용자 지정 모델을 배포합니다.
  7. 사용자 지정 모델을 사용합니다.
  8. 필요에 따라 사용자 지정 모델의 성능 및 적합성을 분석합니다.

학습 및 유효성 검사 데이터 준비

학습 데이터 및 유효성 검사 데이터 세트는 원하는 모델 성능에 대한 입력 및 출력 예제로 구성됩니다.

모델 유형에 따라 학습 데이터의 형식이 다릅니다.

사용하는 학습 및 유효성 검사 데이터는 반드시 JSONL(JSON Lines) 문서로 서식을 지정해야 합니다. gpt-35-turbo-0613의 경우 세부 조정 데이터 세트는 채팅 완료 API에서 사용하는 대화 형식으로 서식을 지정해야 합니다.

gpt-35-turbo-0613 미세 조정을 단계별로 연습하려면 Azure OpenAI 미세 조정 자습서를 참조하세요.

예제 파일 형식

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

멀티 턴 채팅 파일 형식

jsonl 학습 파일의 한 줄에 여러 번 대화하는 것도 지원됩니다. 특정 도우미 메시지에 대한 미세 조정을 건너뛰려면 선택적 weight 키 값 쌍을 추가합니다. 현재 weight는 0 또는 1로 설정할 수 있습니다.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

JSONL 형식 외에도, 학습 및 유효성 검사 데이터 파일은 UTF-8로 인코딩되어야 하고 BOM(바이트 순서 표시)을 포함해야 합니다. 파일 크기는 512MB 미만이어야 합니다.

학습 및 유효성 검사 데이터 세트 만들기

학습 사례가 많을수록 좋습니다. 미세 조정 작업은 최소 10개의 학습 예가 없으면 진행되지 않지만, 그렇게 적은 숫자로는 모델 응답에 눈에 띄게 영향을 미치기에는 충분하지 않습니다. 성공하려면 수천 개는 아니더라도 수백 개의 학습 사례를 제공하는 것이 가장 좋습니다.

일반적으로 데이터 세트 크기가 두 배로 증가할 때마다 모델 품질이 선형적으로 증가할 수 있습니다. 그러나 저품질 예제는 성능에 부정적인 영향을 미칠 수 있습니다. 최고 품질의 예제에 대해서만 데이터 세트를 먼저 정리하지 않고 대량의 내부 데이터에서 모델을 학습하는 경우, 예상보다 훨씬 더 나쁜 성능을 발휘하는 모델이 될 수 있습니다.

학습 데이터 업로드

다음 단계는 모델을 사용자 지정할 때 사용할 준비된 기존 학습 데이터를 선택하거나 준비된 새 학습 데이터를 업로드하는 것입니다. 학습 데이터를 준비한 후에는 파일을 서비스에 업로드할 수 있습니다. 학습 데이터를 업로드하는 두 가지 방법이 있습니다.

대용량 데이터 파일의 경우 Azure Blob 저장소에서 가져오는 것이 좋습니다. 요청이 원자성이어서 다시 시도하거나 다시 시작할 수 없기 때문에 대용량 파일은 멀티파트 양식을 통해 업로드할 때 불안정해질 수 있습니다. Azure Blob 스토리지에 대한 자세한 내용은 Azure Blob 스토리지란?을 참조하세요.

참고 항목

학습 데이터 파일은 JSONL 파일로 포맷되고 BOM(바이트 순서 표시)이 있는 UTF-8로 인코딩되어야 합니다. 파일 크기는 512MB 미만이어야 합니다.

다음 Python 예제에서는 Python SDK를 사용하여 로컬 학습 및 유효성 검사 파일을 업로드하고 반환된 파일 ID를 검색합니다.

# Upload fine-tuning files

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-05-01-preview"  # This API version or later is required to access seed/events/checkpoint capabilities
)

training_file_name = 'training_set.jsonl'
validation_file_name = 'validation_set.jsonl'

# Upload the training and validation dataset files to Azure OpenAI with the SDK.

training_response = client.files.create(
    file=open(training_file_name, "rb"), purpose="fine-tune"
)
training_file_id = training_response.id

validation_response = client.files.create(
    file=open(validation_file_name, "rb"), purpose="fine-tune"
)
validation_file_id = validation_response.id

print("Training file ID:", training_file_id)
print("Validation file ID:", validation_file_id)

사용자 지정 모델 만들기

학습 및 유효성 검사 파일을 업로드하면 미세 조정 작업을 시작할 준비가 된 것입니다.

다음 Python 코드는 Python SDK를 사용하여 새 미세 조정 작업을 만드는 방법의 예를 보여줍니다.

이 예에서는 시드 매개 변수도 전달합니다. 시드는 작업의 재현성을 제어합니다. 동일한 시드 및 작업 매개 변수를 전달하면 동일한 결과가 생성되지만 드문 경우에 다를 수 있습니다. 시드를 지정하지 않으면 시드가 생성됩니다.

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
    seed = 105  # seed parameter controls reproducibility of the fine-tuning job. If no seed is specified one will be generated automatically.
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

또한 하이퍼 매개 변수와 같은 추가 선택적 매개 변수를 전달하여 미세 조정 프로세스를 보다 잘 제어할 수 있습니다. 초기 학습의 경우 이러한 매개 변수를 지정하지 않고 존재하는 자동 기본값을 사용하는 것이 좋습니다.

미세 조정을 위해 현재 지원되는 하이퍼 매개 변수는 다음과 같습니다.

이름 타입 설명
batch_size 정수 학습에 사용할 일괄 처리 크기입니다. 일괄 처리 크기는 단일 전진 및 후진 계산법을 학습하는 데 사용되는 학습 예의 수입니다. 일반적으로 일괄 처리 크기가 클수록 데이터 세트가 클수록 더 잘 작동하는 경향이 있습니다. 기본값과 이 속성의 최대값은 기본 모델과 관련이 있습니다. 일괄 처리 크기가 클수록 모델 매개 변수는 덜 자주 업데이트되지만 분산은 낮습니다.
learning_rate_multiplier number 학습에 사용할 학습 속도 승수입니다. 미세 조정 학습 속도는 사전 학습에 사용된 원래 학습 속도에 이 값을 곱한 값입니다. 학습률이 클수록 일괄 처리 크기가 클수록 성능이 더 좋은 경향이 있습니다. 0.02에서 0.2 사이의 값으로 실험하여 최상의 결과를 생성하는 값을 확인하는 것이 좋습니다. 학습 속도가 작을수록 과잉 맞춤을 방지하는 데 유용할 수 있습니다.
n_epochs 정수 모델을 학습할 Epoch의 수입니다. Epoch는 학습 데이터 세트를 통한 하나의 전체 주기를 나타냅니다.

OpenAI Python API의 1.x 버전으로 사용자 지정 하이퍼 매개 변수를 설정하려면 다음을 수행합니다.

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  # This API version or later is required to access fine-tuning for turbo/babbage-002/davinci-002
)

client.fine_tuning.jobs.create(
  training_file="file-abc123", 
  model="gpt-35-turbo-0613", # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
  hyperparameters={
    "n_epochs":2
  }
)

미세 조정 작업 상태 확인

response = client.fine_tuning.jobs.retrieve(job_id)

print("Job ID:", response.id)
print("Status:", response.status)
print(response.model_dump_json(indent=2))

미세 조정 이벤트 나열

학습 중에 생성된 개별 미세 조정 이벤트를 검사하려면 다음을 수행합니다.

이 명령을 실행하려면 OpenAI 클라이언트 라이브러리를 pip install openai --upgrade를 사용하여 최신 버전으로 업그레이드해야 할 수도 있습니다.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

검사점

각 학습 epoch가 완료되면 검사점이 생성됩니다. 검사점은 후속 미세 조정 작업을 위한 대상 모델로 배포 및 사용할 수 있는 모델의 완전한 기능 버전입니다. 검사점은 과잉 맞춤이 발생하기 전에 모델의 스냅샷을 제공할 수 있으므로 특히 유용할 수 있습니다. 미세 조정 작업이 완료되면 배포할 수 있는 최신 모델 버전 3개가 제공됩니다. 최종 epoch는 미세 조정된 모델로 표시되며 이전 두 epoch는 검사점으로 사용할 수 있습니다.

list checkpoints 명령을 실행하여 개별 미세 조정 작업과 관련된 검사점 목록을 검색할 수 있습니다.

이 명령을 실행하려면 OpenAI 클라이언트 라이브러리를 pip install openai --upgrade를 사용하여 최신 버전으로 업그레이드해야 할 수도 있습니다.

response = client.fine_tuning.jobs.list_events(fine_tuning_job_id=job_id, limit=10)
print(response.model_dump_json(indent=2))

안전 평가 GPT-4 미세 조정 - 공개 미리 보기

GPT-4는 사용자의 요구 사항에 맞게 미세 조정할 수 있는 가장 고급 모델입니다. 일반적으로 Azure OpenAI 모델과 마찬가지로 미세 조정된 모델의 고급 기능에는 유해한 콘텐츠, 조작, 인간과 유사한 동작, 개인 정보 보호 문제 등과 관련된 책임감 있는 AI가 해결해야 할 문제가 증가합니다. 책임감 있는 AI 사례투명성 고지에서 위험, 기능, 제한 사항에 대해 자세히 알아봅니다. GPT-4 미세 조정된 모델과 관련된 위험을 완화하기 위해 미세 조정된 모델의 학습 및 출력에서 유해한 콘텐츠를 감지하고 방지하는 데 도움이 되는 추가 평가 단계를 구현했습니다. 이러한 단계는 Microsoft의 책임감 있는 AI 표준Azure OpenAI 서비스 콘텐츠 필터링에 근거합니다.

  • 평가는 전용 고객별 프라이빗 작업 영역에서 수행됩니다.
  • 평가 엔드포인트는 Azure OpenAI 리소스와 동일한 지역에 있습니다.
  • 학습 데이터는 평가 수행과 관련하여 저장되지 않으며, 최종 모델 평가(배포 가능 또는 배포 불가능)만 유지됩니다.

GPT-4 미세 조정된 모델 평가 필터는 미리 정의된 임계값으로 설정되며 고객이 수정할 수 없습니다. 사용자가 만들었을 수 있는 사용자 지정 콘텐츠 필터링 구성에 연결되지 않습니다.

데이터 평가

학습이 시작되기 전에 잠재적으로 유해한 콘텐츠(폭력, 성적인 내용, 혐오, 공정성, 자해 등, 여기에서 범주 정의 참조)가 있는지 데이터를 평가합니다. 지정된 심각도 수준 이상으로 유해한 콘텐츠가 감지되면 학습 작업이 실패하고 실패 범주를 알리는 메시지가 표시됩니다.

샘플 메시지:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

학습 데이터는 미세 조정 기능을 제공하는 일환으로 데이터 가져오기 작업 내에서 자동으로 평가됩니다.

학습 데이터의 유해한 콘텐츠가 감지되어 미세 조정 작업이 실패하는 경우 요금이 청구되지 않습니다.

모델 평가

학습이 완료되었지만 미세 조정된 모델을 배포할 수 있기 전에, 결과 모델은 Azure의 기본 제공 위험 및 안전 메트릭을 사용하여 잠재적으로 유해한 대응에 대해 평가됩니다. 기본 대형 언어 모델에 사용하는 테스트와 동일한 접근 방식을 사용하여 평가 기능은 지정된 유해한 콘텐츠 범주(폭력, 성적인 내용, 혐오, 공정성, 자해)를 사용하여 유해한 콘텐츠를 출력할 가능성을 평가하기 위해 미세 조정된 모델과의 대화를 시뮬레이션합니다.

허용 가능한 비율 이상으로 유해한 것으로 감지된 콘텐츠를 포함하는 출력을 모델이 생성하는 것으로 확인되면 배포에 해당 모델을 사용할 수 없다는 알림이 표시되고 특정 범주의 피해에 대한 정보가 표시됩니다.

샘플 메시지:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

안전성 평가로 인해 실패한 미세 조정 작업의 스크린샷

데이터 평가와 마찬가지로 모델은 미세 조정 기능 제공의 일환으로 미세 조정 작업 내에서 자동으로 평가됩니다. 결과 평가(배포 가능 또는 배포 불가능)만 서비스에서 기록합니다. 모델 출력에서 유해한 콘텐츠가 감지되어 미세 조정된 모델의 배포가 실패하는 경우 학습 실행에 대한 요금이 청구되지 않습니다.

사용자 지정 모델 배포

미세 조정 작업이 성공하면 응답 본문에 있는 fine_tuned_model 변수 값이 사용자 지정 모델의 이름으로 설정됩니다. 이제 모델 나열 API에서 모델을 검색할 수도 있습니다. 그러나 사용자 지정 모델이 배포되기 전에는 사용자 지정 모델에 대한 완료 호출을 실행할 수 없습니다. 완료 호출에 사용할 수 있도록 사용자 지정 모델을 배포해야 합니다.

Important

사용자 지정된 모델을 배포한 후 언제든지 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델이 배포된 지 15일이 넘었고 연속 15일 동안 모델에 대한 완료 또는 채팅 완료 호출이 이루어지지 않은 경우 맞춤형 모델 배포는 비활성 상태입니다.

비활성 배포를 삭제해도 기본 사용자 지정 모델은 삭제되거나 영향을 받지 않으며 사용자 지정 모델은 언제든지 다시 배포될 수 있습니다. Azure OpenAI Service 가격 책정에 설명된 대로 배포되는 각 사용자 지정(세밀 조정) 모델에는 완료 또는 채팅 완료 호출이 모델에 대해 수행되는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI Service 비용 관리 계획의 지침을 참조하세요.

Azure OpenAI 또는 Azure CLI를 사용하여 사용자 지정 모델을 배포할 수 있습니다.

참고 항목

하나의 사용자 지정 모델에는 하나의 배포만 허용됩니다. 이미 배포된 사용자 지정 모델을 선택하면 오류가 발생합니다.

미세 조정된 모델 배포

이전 SDK 명령과 달리 별도의 권한 부여, 다른 API 경로 및 다른 API 버전이 필요한 컨트롤 플레인 API를 사용하여 배포를 수행해야 합니다.

변수 정의
token 권한 부여 토큰을 생성하는 방법에는 여러 가지가 있습니다. 초기 테스트를 위한 가장 쉬운 방법은 Azure Portal에서 Cloud Shell을 시작하는 것입니다. 그런 다음 az account get-access-token를 실행합니다. 이 토큰을 API 테스트를 위한 임시 권한 부여 토큰으로 사용할 수 있습니다. 새 환경 변수에 저장하는 것이 좋습니다.
구독 연결된 Azure OpenAI 리소스에 대한 구독 ID
resource_group Azure OpenAI 리소스의 리소스 그룹 이름
resource_name Azure OpenAI 리소스 이름
model_deployment_name 미세 조정된 새 모델 배포의 사용자 지정 이름입니다. 채팅 완료 호출을 수행할 때 코드에서 참조되는 이름입니다.
fine_tuned_model 이전 단계의 미세 조정 작업 결과에서 이 값을 검색합니다. gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83와 같이 표시됩니다. 해당 값을 deploy_data json에 추가해야 합니다. 또는 ftchkpt-e559c011ecc04fc68eaa339d8227d02d 형식으로 표시되는 검사점 ID를 전달하여 검사점을 배포할 수도 있습니다.
import json
import os
import requests

token= os.getenv("<TOKEN>") 
subscription = "<YOUR_SUBSCRIPTION_ID>"  
resource_group = "<YOUR_RESOURCE_GROUP_NAME>"
resource_name = "<YOUR_AZURE_OPENAI_RESOURCE_NAME>"
model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}

deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"fine_tuned_model">, #retrieve this value from the previous call, it will look like gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83
            "version": "1"
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

지역 간 배포

미세 조정은 모델이 원래 미세 조정된 지역과 다른 지역에 미세 조정된 모델을 배포하도록 지원합니다. 다른 구독/지역에 배포할 수도 있습니다.

유일한 제한 사항은 새 지역이 미세 조정도 지원해야 하며, 교차 구독을 배포할 때 배포에 대한 권한 부여 토큰을 생성하는 계정에는 원본 및 대상 구독 모두에 대한 액세스 권한이 있어야 한다는 것입니다.

다음은 한 구독/지역에서 세밀하게 조정된 모델을 다른 구독에 배포하는 예제입니다.

import json
import os
import requests

token= os.getenv("<TOKEN>") 

subscription = "<DESTINATION_SUBSCRIPTION_ID>"  
resource_group = "<DESTINATION_RESOURCE_GROUP_NAME>"
resource_name = "<DESTINATION_AZURE_OPENAI_RESOURCE_NAME>"

source_subscription = "<SOURCE_SUBSCRIPTION_ID>"
source_resource_group = "<SOURCE_RESOURCE_GROUP>"
source_resource = "<SOURCE_RESOURCE>"


source = f'/subscriptions/{source_subscription}/resourceGroups/{source_resource_group}/providers/Microsoft.CognitiveServices/accounts/{source_resource}'

model_deployment_name ="gpt-35-turbo-ft" # custom deployment name that you will use to reference the model when making inference calls.

deploy_params = {'api-version': "2023-05-01"} 
deploy_headers = {'Authorization': 'Bearer {}'.format(token), 'Content-Type': 'application/json'}



deploy_data = {
    "sku": {"name": "standard", "capacity": 1}, 
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": <"FINE_TUNED_MODEL_NAME">, # This value will look like gpt-35-turbo-0613.ft-0ab3f80e4f2242929258fff45b56a9ce 
            "version": "1",
            "source": source
        }
    }
}
deploy_data = json.dumps(deploy_data)

request_url = f'https://management.azure.com/subscriptions/{subscription}/resourceGroups/{resource_group}/providers/Microsoft.CognitiveServices/accounts/{resource_name}/deployments/{model_deployment_name}'

print('Creating a new deployment...')

r = requests.put(request_url, params=deploy_params, headers=deploy_headers, data=deploy_data)

print(r)
print(r.reason)
print(r.json())

동일한 구독 간에 배포하지만 다른 지역 간에 배포하려면 구독 및 리소스 그룹이 원본 변수와 대상 변수 모두에 대해 동일해야 하며 원본 및 대상 리소스 이름만 고유해야 합니다.

Azure CLI를 사용하여 모델 배포

다음 예제에서는 Azure CLI를 사용하여 사용자 지정 모델을 배포하는 방법을 보여줍니다. Azure CLI를 사용하면 사용자 지정 모델의 배포 이름을 지정해야 합니다. Azure CLI를 사용하여 사용자 지정된 모델을 배포하는 방법에 대한 자세한 내용은 az cognitiveservices account deployment을(를) 참조하세요.

콘솔 창에서 이 Azure CLI 명령을 실행하려면 다음 <자리 표시자>를 사용자 지정 모델에 해당하는 값으로 바꿔야 합니다.

자리 표시자
<YOUR_AZURE_SUBSCRIPTION> Azure 구독의 이름 또는 ID입니다.
<YOUR_RESOURCE_GROUP> Azure 리소스 그룹의 이름입니다.
<YOUR_RESOURCE_NAME> Azure OpenAI 리소스의 이름입니다.
<YOUR_DEPLOYMENT_NAME> 모델 배포에 사용하려는 이름입니다.
<YOUR_FINE_TUNED_MODEL_ID> 사용자 지정 모델의 이름입니다.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

배포된 사용자 지정 모델 사용

사용자 지정 모델이 배포되었으면 배포된 다른 모델처럼 사용할 수 있습니다. Azure OpenAI Studio플레이그라운드를 사용하여 새 배포로 실험해볼 수 있습니다. 배포된 다른 모델과 마찬가지로 사용자 지정 모델에서 temperaturemax_tokens와 같은 동일한 매개 변수를 계속 사용할 수 있습니다. 미세 조정된 babbage-002 모델 및 davinci-002 모델의 경우 완료 플레이그라운드 및 완료 API를 사용합니다. 미세 조정된 gpt-35-turbo-0613 모델의 경우 채팅 플레이그라운드 및 채팅 완료 API를 사용합니다.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"
)

response = client.chat.completions.create(
    model="gpt-35-turbo-ft", # model = "Custom deployment name you chose for your fine-tuning model"
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},
        {"role": "user", "content": "Do other Azure AI services support this too?"}
    ]
)

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

사용자 지정 모델 분석

미세 조정 작업이 완료되면 Azure OpenAI는 results.csv라는 결과 파일을 각 미세 조정 작업에 연결합니다. 이 결과 파일을 사용하여 사용자 지정 모델의 학습 및 유효성 검사 성능을 분석할 수 있습니다. 결과 파일의 파일 ID는 각 사용자 지정 모델에 대해 나열되며, Python SDK를 사용하여 파일 ID를 검색하고 결과 파일을 다운로드하여 분석할 수 있습니다.

다음 Python 예제에서는 사용자 지정 모델의 미세 조정 작업에 연결된 첫 번째 결과 파일의 파일 ID를 검색한 다음, 파일을 분석할 수 있도록 Python SDK를 사용하여 파일을 작업 디렉터리에 다운로드합니다.

# Retrieve the file ID of the first result file from the fine-tuning job
# for the customized model.
response = client.fine_tuning.jobs.retrieve(job_id)
if response.status == 'succeeded':
    result_file_id = response.result_files[0]

retrieve = client.files.retrieve(result_file_id)

# Download the result file.
print(f'Downloading result file: {result_file_id}')

with open(retrieve.filename, "wb") as file:
    result = client.files.content(result_file_id).read()
    file.write(result)

결과 파일은 미세 조정 작업에서 수행하는 각 학습 단계에 대한 머리글 행과 행을 포함하는 CSV 파일입니다. 결과 파일에는 다음 열이 포함되어 있습니다.

열 이름 설명
step 학습 단계의 수입니다. 학습 단계는 학습 데이터 일괄 처리에 대한 정방향 및 역방향 단일 패스를 나타냅니다.
train_loss 학습 일괄 처리의 손실입니다.
train_mean_token_accuracy 모델에서 올바르게 예측한 학습 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
valid_loss 유효성 검사 일괄 처리의 손실입니다.
validation_mean_token_accuracy 모델에서 올바르게 예측한 유효성 검사 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
full_valid_loss 각 epoch의 끝에서 계산된 유효성 검사 손실입니다. 학습이 잘되면 손실이 줄어들 것입니다.
full_valid_mean_token_accuracy 각 epoch의 끝에서 계산된 유효한 평균 토큰 정확도입니다. 학습이 잘 진행되면 토큰 정확도가 높아져야 합니다.

Azure OpenAI Studio에서 results.csv 파일의 데이터를 플롯으로 볼 수도 있습니다. 학습된 모델에 대한 링크를 선택하면 손실, 평균 토큰 정확도 및 토큰 정확도의 세 가지 차트가 표시됩니다. 유효성 검사 데이터를 제공한 경우 두 데이터 세트가 모두 동일한 플롯에 나타납니다.

시간이 지남에 따라 손실이 감소하고 정확도가 증가하는지 확인합니다. 학습 데이터와 유효성 검사 데이터 사이에 차이가 있는 경우 이는 과잉 맞춤을 의미할 수 있습니다. 더 적은 epoch 또는 더 작은 학습 속도 승수를 사용하여 학습을 시도합니다.

배포, 사용자 지정 모델 및 학습 파일 정리

사용자 지정 모델을 완료했으면 배포 및 모델을 삭제해도 됩니다. 원한다면 서비스에 업로드한 학습 및 유효성 검사 파일까지 삭제해도 됩니다.

모델 배포 삭제

Important

사용자 지정된 모델을 배포한 후 언제든지 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델이 배포된 지 15일이 넘었고 연속 15일 동안 모델에 대한 완료 또는 채팅 완료 호출이 이루어지지 않은 경우 맞춤형 모델 배포는 비활성 상태입니다.

비활성 배포를 삭제해도 기본 사용자 지정 모델은 삭제되거나 영향을 받지 않으며 사용자 지정 모델은 언제든지 다시 배포될 수 있습니다. Azure OpenAI Service 가격 책정에 설명된 대로 배포되는 각 사용자 지정(세밀 조정) 모델에는 완료 또는 채팅 완료 호출이 모델에 대해 수행되는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI Service 비용 관리 계획의 지침을 참조하세요.

다음과 같은 다양한 방법으로 사용자 지정 모델의 배포를 삭제할 수 있습니다.

사용자 지정 모델 삭제

마찬가지로 다양한 방법으로 사용자 지정 모델을 삭제할 수 있습니다.

참고 항목

기존 배포가 있는 사용자 지정 모델은 삭제할 수 없습니다. 사용자 지정 모델을 삭제하려면 모델 배포부터 삭제해야 합니다.

학습 파일 삭제

필요에 따라 Azure OpenAI 구독에서 학습을 위해 업로드한 학습 및 유효성 검사 파일과 학습 중에 생성된 결과 파일을 삭제할 수 있습니다. 다음 방법을 사용하여 학습, 유효성 검사 및 결과 파일을 삭제할 수 있습니다.

다음 Python 예제에서는 Python SDK를 사용하여 사용자 지정 모델의 학습, 유효성 검사 및 결과 파일을 삭제합니다.

print('Checking for existing uploaded files.')
results = []

# Get the complete list of uploaded files in our subscription.
files = openai.File.list().data
print(f'Found {len(files)} total uploaded files in the subscription.')

# Enumerate all uploaded files, extracting the file IDs for the
# files with file names that match your training dataset file and
# validation dataset file names.
for item in files:
    if item["filename"] in [training_file_name, validation_file_name, result_file_name]:
        results.append(item["id"])
print(f'Found {len(results)} already uploaded files that match our files')

# Enumerate the file IDs for our files and delete each file.
print(f'Deleting already uploaded files.')
for id in results:
    openai.File.delete(sid = id)

연속 미세 조정

미세 조정된 모델을 만든 후에는 추가 미세 조정을 통해 시간이 지남에 따라 모델을 계속 구체화할 수 있습니다. 지속적인 미세 조정은 이미 미세 조정된 모델을 기본 모델로 선택하고 새로운 학습 예제 집합에서 추가로 미세 조정하는 반복적인 프로세스입니다.

이전에 미세 조정한 모델에 대해 미세 조정을 수행하려면 사용자 지정 모델 만들기에 설명된 것과 동일한 프로세스를 사용하지만 일반 기본 모델의 이름을 지정하는 대신 이미 미세 조정된 모델의 ID를 지정합니다. 미세 조정된 모델 ID는 gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7과(와) 같습니다.

from openai import AzureOpenAI

client = AzureOpenAI(
  azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"), 
  api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
  api_version="2024-02-01"  
)

response = client.fine_tuning.jobs.create(
    training_file=training_file_id,
    validation_file=validation_file_id,
    model="gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7" # Enter base model name. Note that in Azure OpenAI the model name contains dashes and cannot contain dot/period characters. 
)

job_id = response.id

# You can use the job ID to monitor the status of the fine-tuning job.
# The fine-tuning job will take some time to start and complete.

print("Job ID:", response.id)
print("Status:", response.id)
print(response.model_dump_json(indent=2))

또한 suffix 매개 변수를 포함하여 미세 조정된 모델의 여러 반복을 더 쉽게 구분할 수 있도록 하는 것이 좋습니다. suffix은(는) 문자열을 사용하고 미세 조정된 모델을 식별하도록 설정됩니다. OpenAI Python API를 사용하면 미세 조정된 모델 이름에 추가될 최대 18자의 문자열이 지원됩니다.

기존 미세 조정된 모델의 ID가 확실하지 않은 경우 이 정보는 Azure OpenAI Studio의 모델 페이지에서 찾거나 REST API를 사용하여 지정된 Azure OpenAI 리소스에 대한 모델 목록을 생성할 수 있습니다.

필수 조건

참고 항목

현재 Azure OpenAI Service 에 액세스하려면 신청서를 제출해야 합니다. 액세스를 신청하려면 이 양식을 작성하세요.

모델

다음 모델은 미세 조정을 지원합니다.

  • babbage-002
  • davinci-002
  • gpt-35-turbo(0613)
  • gpt-35-turbo(1106)
  • gpt-35-turbo(0125)
  • gpt-4(0613)

모델 페이지를 참조하여 현재 미세 조정을 지원하는 지역을 확인합니다.

gpt-4를 미세 조정에 사용하려는 경우 GPT-4 공개 미리 보기 안전 평가 지침을 참조하세요.

REST API에 대한 워크플로 검토

잠시 시간을 내어 Azure OpenAI에서 REST API 및 Python을 사용하기 위한 미세 조정 워크플로를 검토합니다.

  1. 학습 및 유효성 검사 데이터를 준비합니다.
  2. 기본 모델을 선택합니다.
  3. 학습 데이터를 업로드합니다.
  4. 새 사용자 지정 모델을 학습시킵니다.
  5. 사용자 지정 모델의 상태를 확인합니다.
  6. 사용할 사용자 지정 모델을 배포합니다.
  7. 사용자 지정 모델을 사용합니다.
  8. 필요에 따라 사용자 지정 모델의 성능 및 적합성을 분석합니다.

학습 및 유효성 검사 데이터 준비

학습 데이터 및 유효성 검사 데이터 세트는 원하는 모델 성능에 대한 입력 및 출력 예제로 구성됩니다.

모델 유형에 따라 학습 데이터의 형식이 다릅니다.

사용하는 학습 및 유효성 검사 데이터는 반드시 JSONL(JSON Lines) 문서로 서식을 지정해야 합니다. gpt-35-turbo-0613 및 기타 관련 모델의 경우 미세 조정 데이터 세트는 채팅 완료 API에서 사용하는 대화형식으로 형식을 지정해야 합니다.

gpt-35-turbo-0613 미세 조정을 단계별로 연습하려면 Azure OpenAI 미세 조정 자습서를 참조하세요.

예제 파일 형식

{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Is Xbox better than PlayStation?"}, {"role": "assistant", "content": "I apologize, but I cannot provide personal opinions. My primary job is to assist you with any issues related to your Xbox device. Do you have any Xbox-related issues that need addressing?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "Can I play PC games on my Xbox?"}, {"role": "assistant", "content": "While Xbox consoles don't natively support PC games, they can play an array of Xbox games, many of which are also available on PC. Can I assist you with finding games compatible with your Xbox device?"}]}
{"messages": [{"role": "system", "content": "You are an Xbox customer support agent whose primary goal is to help users with issues they are experiencing with their Xbox devices. You are friendly and concise. You only provide factual answers to queries, and do not provide answers that are not related to Xbox."}, {"role": "user", "content": "I'm having trouble connecting my Xbox to the Wi-Fi."}, {"role": "assistant", "content": "No worries, let's go through the network settings on your Xbox. Can you please tell me what happens when you try to connect it to the Wi-Fi?"}]}

멀티 턴 채팅 파일 형식

jsonl 학습 파일의 한 줄에 여러 번 대화하는 것도 지원됩니다. 특정 도우미 메시지에 대한 미세 조정을 건너뛰려면 선택적 weight 키 값 쌍을 추가합니다. 현재 weight는 0 또는 1로 설정할 수 있습니다.

{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "What's the capital of France?"}, {"role": "assistant", "content": "Paris", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Paris, as if everyone doesn't know that already.", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "Who wrote 'Romeo and Juliet'?"}, {"role": "assistant", "content": "William Shakespeare", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Oh, just some guy named William Shakespeare. Ever heard of him?", "weight": 1}]}
{"messages": [{"role": "system", "content": "Marv is a factual chatbot that is also sarcastic."}, {"role": "user", "content": "How far is the Moon from Earth?"}, {"role": "assistant", "content": "384,400 kilometers", "weight": 0}, {"role": "user", "content": "Can you be more sarcastic?"}, {"role": "assistant", "content": "Around 384,400 kilometers. Give or take a few, like that really matters.", "weight": 1}]}

JSONL 형식 외에도, 학습 및 유효성 검사 데이터 파일은 UTF-8로 인코딩되어야 하고 BOM(바이트 순서 표시)을 포함해야 합니다. 파일 크기는 512MB 미만이어야 합니다.

학습 및 유효성 검사 데이터 세트 만들기

학습 사례가 많을수록 좋습니다. 미세 조정 작업은 최소 10개의 학습 예가 없으면 진행되지 않지만, 그렇게 적은 숫자로는 모델 응답에 눈에 띄게 영향을 미치기에는 충분하지 않습니다. 성공하려면 수천 개는 아니더라도 수백 개의 학습 사례를 제공하는 것이 가장 좋습니다.

일반적으로 데이터 세트 크기가 두 배로 증가할 때마다 모델 품질이 선형적으로 증가할 수 있습니다. 그러나 저품질 예제는 성능에 부정적인 영향을 미칠 수 있습니다. 최고 품질의 예제에 대해서만 데이터 세트를 먼저 정리하지 않고 대량의 내부 데이터에서 모델을 학습하는 경우, 예상보다 훨씬 더 나쁜 성능을 발휘하는 모델이 될 수 있습니다.

기본 모델 선택

사용자 지정 모델을 만드는 첫 번째 단계는 기본 모델을 선택하는 것입니다. 기본 모델 창에서 사용자 지정 모델에 사용할 기본 모델을 선택할 수 있습니다. 선택하는 기본 모델은 모델의 성능과 비용 모두에 영향을 줍니다.

기본 모델 유형 드롭다운에서 기본 모델을 선택하고 다음을 선택하여 계속합니다.

사용 가능한 다음 기본 모델 중 하나로 사용자 지정 모델을 만들 수 있습니다.

  • babbage-002
  • davinci-002
  • gpt-35-turbo(0613)
  • gpt-35-turbo(1106)
  • gpt-35-turbo(0125)
  • gpt-4(0613)

또는 이전에 미세 조정된 모델을 base-model.ft-{jobid} 형식으로 미세 조정할 수 있습니다.

사용자 지정 미세 조정 모델이 포함된 모델 옵션의 스크린샷.

미세 조정할 수 있는 기본 모델에 대한 자세한 내용은 모델을 참조하세요.

학습 데이터 업로드

다음 단계는 모델을 미세 조정할 때 사용할 준비된 기존 학습 데이터를 선택하거나 준비된 새 학습 데이터를 업로드하는 것입니다. 학습 데이터를 준비한 후에는 파일을 서비스에 업로드할 수 있습니다. 학습 데이터를 업로드하는 두 가지 방법이 있습니다.

대용량 데이터 파일의 경우 Azure Blob 저장소에서 가져오는 것이 좋습니다. 요청이 원자성이어서 다시 시도하거나 다시 시작할 수 없기 때문에 대용량 파일은 멀티파트 양식을 통해 업로드할 때 불안정해질 수 있습니다. Azure Blob 스토리지에 대한 자세한 내용은 Azure Blob 스토리지란?을 참조하세요.

참고 항목

학습 데이터 파일은 JSONL 파일로 포맷되고 BOM(바이트 순서 표시)이 있는 UTF-8로 인코딩되어야 합니다. 파일 크기는 512MB 미만이어야 합니다.

학습 데이터 업로드

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\training_set.jsonl;type=application/json"

유효성 검사 데이터 업로드

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/files?api-version=2023-12-01-preview \
  -H "Content-Type: multipart/form-data" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -F "purpose=fine-tune" \
  -F "file=@C:\\fine-tuning\\validation_set.jsonl;type=application/json"

사용자 지정 모델 만들기

학습 및 유효성 검사 파일을 업로드했으면 미세 조정 작업을 시작할 준비가 된 것입니다. 다음 코드는 REST API를 사용하여 새 미세 조정 작업을 만드는 방법의 예를 보여 줍니다.

이 예에서는 시드 매개 변수도 전달합니다. 시드는 작업의 재현성을 제어합니다. 동일한 시드 및 작업 매개 변수를 전달하면 동일한 결과가 생성되지만 드물게 다를 수 있습니다. 시드를 지정하지 않으면 시드가 생성됩니다.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "seed": 105
}'

또한 하이퍼 매개 변수와 같은 추가 선택적 매개 변수를 전달하여 미세 조정 프로세스를 보다 잘 제어할 수 있습니다. 초기 학습의 경우 이러한 매개 변수를 지정하지 않고 존재하는 자동 기본값을 사용하는 것이 좋습니다.

미세 조정을 위해 현재 지원되는 하이퍼 매개 변수는 다음과 같습니다.

이름 타입 설명
batch_size 정수 학습에 사용할 일괄 처리 크기입니다. 일괄 처리 크기는 단일 전진 및 후진 계산법을 학습하는 데 사용되는 학습 예의 수입니다. 일반적으로 일괄 처리 크기가 클수록 데이터 세트가 클수록 더 잘 작동하는 경향이 있습니다. 기본값과 이 속성의 최대값은 기본 모델과 관련이 있습니다. 일괄 처리 크기가 클수록 모델 매개 변수는 덜 자주 업데이트되지만 분산은 낮습니다.
learning_rate_multiplier number 학습에 사용할 학습 속도 승수입니다. 미세 조정 학습 속도는 사전 학습에 사용된 원래 학습 속도에 이 값을 곱한 값입니다. 학습률이 클수록 일괄 처리 크기가 클수록 성능이 더 좋은 경향이 있습니다. 0.02에서 0.2 사이의 값으로 실험하여 최상의 결과를 생성하는 값을 확인하는 것이 좋습니다. 학습 속도가 작을수록 과잉 맞춤을 방지하는 데 유용할 수 있습니다.
n_epochs 정수 모델을 학습할 Epoch의 수입니다. Epoch는 학습 데이터 세트를 통한 하나의 전체 주기를 나타냅니다.

사용자 지정 모델의 상태 확인

미세 조정 작업을 시작한 후 완료하는 데 시간이 걸릴 수 있습니다. 사용자의 작업이 시스템의 다른 작업 뒤에 대기 중일 수 있습니다. 모델 및 데이터 세트 크기에 따라 모델을 학습하는 데 몇 분 또는 몇 시간이 걸릴 수 있습니다. 다음 예제에서는 REST API를 사용하여 미세 조정 작업의 상태를 확인합니다. 이 예제에서는 이전 예제에서 반환된 작업 ID를 사용하여 작업 정보를 검색합니다.

curl -X GET $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<YOUR-JOB-ID>?api-version=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY"

미세 조정 이벤트 나열

학습 중에 생성된 개별 미세 조정 이벤트를 검사하려면 다음을 수행합니다.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/events?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

검사점

각 학습 epoch가 완료되면 검사점이 생성됩니다. 검사점은 후속 미세 조정 작업을 위한 대상 모델로 배포 및 사용할 수 있는 모델의 완전한 기능 버전입니다. 검사점은 과잉 맞춤이 발생하기 전에 모델의 스냅샷을 제공할 수 있으므로 특히 유용할 수 있습니다. 미세 조정 작업이 완료되면 배포할 수 있는 최신 모델 버전 3개가 제공됩니다. 최종 epoch는 미세 조정된 모델로 표시되며 이전 두 epoch는 검사점으로 사용할 수 있습니다.

list checkpoints 명령을 실행하여 개별 미세 조정 작업과 관련된 검사점 목록을 검색할 수 있습니다.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/{fine_tuning_job_id}/checkpoints?api-version=2024-05-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" 

안전 평가 GPT-4 미세 조정 - 공개 미리 보기

GPT-4는 사용자의 요구 사항에 맞게 미세 조정할 수 있는 가장 고급 모델입니다. 일반적으로 Azure OpenAI 모델과 마찬가지로 미세 조정된 모델의 고급 기능에는 유해한 콘텐츠, 조작, 인간과 유사한 동작, 개인 정보 보호 문제 등과 관련된 책임감 있는 AI가 해결해야 할 문제가 증가합니다. 책임감 있는 AI 사례투명성 고지에서 위험, 기능, 제한 사항에 대해 자세히 알아봅니다. GPT-4 미세 조정된 모델과 관련된 위험을 완화하기 위해 미세 조정된 모델의 학습 및 출력에서 유해한 콘텐츠를 감지하고 방지하는 데 도움이 되는 추가 평가 단계를 구현했습니다. 이러한 단계는 Microsoft의 책임감 있는 AI 표준Azure OpenAI 서비스 콘텐츠 필터링에 근거합니다.

  • 평가는 전용 고객별 프라이빗 작업 영역에서 수행됩니다.
  • 평가 엔드포인트는 Azure OpenAI 리소스와 동일한 지역에 있습니다.
  • 학습 데이터는 평가 수행과 관련하여 저장되지 않으며, 최종 모델 평가(배포 가능 또는 배포 불가능)만 유지됩니다.

GPT-4 미세 조정된 모델 평가 필터는 미리 정의된 임계값으로 설정되며 고객이 수정할 수 없습니다. 사용자가 만들었을 수 있는 사용자 지정 콘텐츠 필터링 구성에 연결되지 않습니다.

데이터 평가

학습이 시작되기 전에 잠재적으로 유해한 콘텐츠(폭력, 성적인 내용, 혐오, 공정성, 자해 등, 여기에서 범주 정의 참조)가 있는지 데이터를 평가합니다. 지정된 심각도 수준 이상으로 유해한 콘텐츠가 감지되면 학습 작업이 실패하고 실패 범주를 알리는 메시지가 표시됩니다.

샘플 메시지:

The provided training data failed RAI checks for harm types: [hate_fairness, self_harm, violence]. Please fix the data and try again.

학습 데이터는 미세 조정 기능을 제공하는 일환으로 데이터 가져오기 작업 내에서 자동으로 평가됩니다.

학습 데이터의 유해한 콘텐츠가 감지되어 미세 조정 작업이 실패하는 경우 요금이 청구되지 않습니다.

모델 평가

학습이 완료되었지만 미세 조정된 모델을 배포할 수 있기 전에, 결과 모델은 Azure의 기본 제공 위험 및 안전 메트릭을 사용하여 잠재적으로 유해한 대응에 대해 평가됩니다. 기본 대형 언어 모델에 사용하는 테스트와 동일한 접근 방식을 사용하여 평가 기능은 지정된 유해한 콘텐츠 범주(폭력, 성적인 내용, 혐오, 공정성, 자해)를 사용하여 유해한 콘텐츠를 출력할 가능성을 평가하기 위해 미세 조정된 모델과의 대화를 시뮬레이션합니다.

허용 가능한 비율 이상으로 유해한 것으로 감지된 콘텐츠를 포함하는 출력을 모델이 생성하는 것으로 확인되면 배포에 해당 모델을 사용할 수 없다는 알림이 표시되고 특정 범주의 피해에 대한 정보가 표시됩니다.

샘플 메시지:

This model is unable to be deployed. Model evaluation identified that this fine tuned model scores above acceptable thresholds for [Violence, Self Harm]. Please review your training data set and resubmit the job.

안전성 평가로 인해 실패한 미세 조정 작업의 스크린샷

데이터 평가와 마찬가지로 모델은 미세 조정 기능 제공의 일환으로 미세 조정 작업 내에서 자동으로 평가됩니다. 결과 평가(배포 가능 또는 배포 불가능)만 서비스에서 기록합니다. 모델 출력에서 유해한 콘텐츠가 감지되어 미세 조정된 모델의 배포가 실패하는 경우 학습 실행에 대한 요금이 청구되지 않습니다.

사용자 지정 모델 배포

Important

사용자 지정된 모델을 배포한 후 언제든지 배포가 15일 이상 비활성 상태로 유지되면 배포가 삭제됩니다. 모델이 배포된 지 15일이 넘었고 연속 15일 동안 모델에 대한 완료 또는 채팅 완료 호출이 이루어지지 않은 경우 맞춤형 모델 배포는 비활성 상태입니다.

비활성 배포를 삭제해도 기본 사용자 지정 모델은 삭제되거나 영향을 받지 않으며 사용자 지정 모델은 언제든지 다시 배포될 수 있습니다. Azure OpenAI Service 가격 책정에 설명된 대로 배포되는 각 사용자 지정(세밀 조정) 모델에는 완료 또는 채팅 완료 호출이 모델에 대해 수행되는지 여부에 관계없이 시간당 호스팅 비용이 발생합니다. Azure OpenAI를 사용하여 비용을 계획하고 관리하는 방법에 대한 자세한 내용은 Azure OpenAI Service 비용 관리 계획의 지침을 참조하세요.

다음 Python 예제에서는 REST API를 사용하여 사용자 지정 모델의 모델 배포를 만드는 방법을 보여줍니다. REST API는 사용자 지정 모델의 배포 이름을 생성합니다.

변수 정의
token 권한 부여 토큰을 생성하는 방법에는 여러 가지가 있습니다. 초기 테스트를 위한 가장 쉬운 방법은 Azure Portal에서 Cloud Shell을 시작하는 것입니다. 그런 다음 az account get-access-token를 실행합니다. 이 토큰을 API 테스트를 위한 임시 권한 부여 토큰으로 사용할 수 있습니다. 새 환경 변수에 저장하는 것이 좋습니다.
구독 연결된 Azure OpenAI 리소스에 대한 구독 ID
resource_group Azure OpenAI 리소스의 리소스 그룹 이름
resource_name Azure OpenAI 리소스 이름
model_deployment_name 미세 조정된 새 모델 배포의 사용자 지정 이름입니다. 채팅 완료 호출을 수행할 때 코드에서 참조되는 이름입니다.
fine_tuned_model 이전 단계의 미세 조정 작업 결과에서 이 값을 검색합니다. gpt-35-turbo-0613.ft-b044a9d3cf9c4228b5d393567f693b83와 같이 표시됩니다. 해당 값을 deploy_data json에 추가해야 합니다. 또는 ftchkpt-e559c011ecc04fc68eaa339d8227d02d 형식으로 표시되는 검사점 ID를 전달하여 검사점을 배포할 수도 있습니다.
curl -X POST "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>",
            "version": "1"
        }
    }
}'

지역 간 배포

미세 조정은 모델이 원래 미세 조정된 지역과 다른 지역에 미세 조정된 모델을 배포하도록 지원합니다. 다른 구독/지역에 배포할 수도 있습니다.

유일한 제한 사항은 새 지역이 미세 조정도 지원해야 하며, 교차 구독을 배포할 때 배포에 대한 권한 부여 토큰을 생성하는 계정에는 원본 및 대상 구독 모두에 대한 액세스 권한이 있어야 한다는 것입니다.

다음은 한 구독/지역에서 세밀하게 조정된 모델을 다른 구독에 배포하는 예제입니다.

curl -X PUT "https://management.azure.com/subscriptions/<SUBSCRIPTION>/resourceGroups/<RESOURCE_GROUP>/providers/Microsoft.CognitiveServices/accounts/<RESOURCE_NAME>/deployments/<MODEL_DEPLOYMENT_NAME>api-version=2023-05-01" \
  -H "Authorization: Bearer <TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "sku": {"name": "standard", "capacity": 1},
    "properties": {
        "model": {
            "format": "OpenAI",
            "name": "<FINE_TUNED_MODEL>", 
            "version": "1",
            "source": "/subscriptions/{sourceSubscriptionID}/resourceGroups/{sourceResourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{sourceAccount}" 
        }
    }
}'

동일한 구독이지만 다른 지역 간에 배포하려면 원본 및 대상 변수 모두에 대해 구독 및 리소스 그룹이 동일해야 하며 원본 및 대상 리소스 이름만 고유해야 합니다.

Azure CLI를 사용하여 모델 배포

다음 예제에서는 Azure CLI를 사용하여 사용자 지정 모델을 배포하는 방법을 보여줍니다. Azure CLI를 사용하면 사용자 지정 모델의 배포 이름을 지정해야 합니다. Azure CLI를 사용하여 사용자 지정된 모델을 배포하는 방법에 대한 자세한 내용은 az cognitiveservices account deployment을(를) 참조하세요.

콘솔 창에서 이 Azure CLI 명령을 실행하려면 다음 <자리 표시자>를 사용자 지정 모델에 해당하는 값으로 바꿔야 합니다.

자리 표시자
<YOUR_AZURE_SUBSCRIPTION> Azure 구독의 이름 또는 ID입니다.
<YOUR_RESOURCE_GROUP> Azure 리소스 그룹의 이름입니다.
<YOUR_RESOURCE_NAME> Azure OpenAI 리소스의 이름입니다.
<YOUR_DEPLOYMENT_NAME> 모델 배포에 사용하려는 이름입니다.
<YOUR_FINE_TUNED_MODEL_ID> 사용자 지정 모델의 이름입니다.
az cognitiveservices account deployment create 
    --resource-group <YOUR_RESOURCE_GROUP>
    --name <YOUR_RESOURCE_NAME>  
    --deployment-name <YOUR_DEPLOYMENT_NAME>
    --model-name <YOUR_FINE_TUNED_MODEL_ID>
    --model-version "1" 
    --model-format OpenAI 
    --sku-capacity "1" 
    --sku-name "Standard"

배포된 사용자 지정 모델 사용

사용자 지정 모델이 배포되었으면 배포된 다른 모델처럼 사용할 수 있습니다. Azure OpenAI Studio플레이그라운드를 사용하여 새 배포로 실험해볼 수 있습니다. 배포된 다른 모델과 마찬가지로 사용자 지정 모델에서 temperaturemax_tokens와 같은 동일한 매개 변수를 계속 사용할 수 있습니다. 미세 조정된 babbage-002 모델 및 davinci-002 모델의 경우 완료 플레이그라운드 및 완료 API를 사용합니다. 미세 조정된 gpt-35-turbo-0613 모델의 경우 채팅 플레이그라운드 및 채팅 완료 API를 사용합니다.

curl $AZURE_OPENAI_ENDPOINT/openai/deployments/<deployment_name>/chat/completions?api-version=2023-05-15 \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{"messages":[{"role": "system", "content": "You are a helpful assistant."},{"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},{"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."},{"role": "user", "content": "Do other Azure AI services support this too?"}]}'

사용자 지정 모델 분석

미세 조정 작업이 완료되면 Azure OpenAI는 results.csv라는 결과 파일을 각 미세 조정 작업에 연결합니다. 이 결과 파일을 사용하여 사용자 지정 모델의 학습 및 유효성 검사 성능을 분석할 수 있습니다. 결과 파일의 파일 ID는 각 사용자 지정 모델에 대해 나열되며, REST API를 사용하여 파일 ID를 검색하고 결과 파일을 다운로드하여 분석할 수 있습니다.

다음 Python 예제에서는 REST API를 사용하여 사용자 지정 모델의 미세 조정 작업에 연결된 첫 번째 결과 파일의 파일 ID를 검색한 다음, 파일을 분석할 수 있도록 파일을 작업 디렉터리에 다운로드합니다.

curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs/<JOB_ID>?api-version=2023-12-01-preview" \
  -H "api-key: $AZURE_OPENAI_API_KEY")
curl -X GET "$AZURE_OPENAI_ENDPOINT/openai/files/<RESULT_FILE_ID>/content?api-version=2023-12-01-preview" \
    -H "api-key: $AZURE_OPENAI_API_KEY" > <RESULT_FILENAME>

결과 파일은 미세 조정 작업에서 수행하는 각 학습 단계에 대한 머리글 행과 행을 포함하는 CSV 파일입니다. 결과 파일에는 다음 열이 포함되어 있습니다.

열 이름 설명
step 학습 단계의 수입니다. 학습 단계는 학습 데이터 일괄 처리에 대한 정방향 및 역방향 단일 패스를 나타냅니다.
train_loss 학습 일괄 처리의 손실입니다.
train_mean_token_accuracy 모델에서 올바르게 예측한 학습 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
valid_loss 유효성 검사 일괄 처리의 손실입니다.
validation_mean_token_accuracy 모델에서 올바르게 예측한 유효성 검사 일괄 처리의 토큰 비율입니다.
예를 들어 일괄 처리 크기가 3으로 설정되고 데이터에 완료 [[1, 2], [0, 5], [4, 2]]가 포함된 경우 모델이 [[1, 1], [0, 5], [4, 2]]를 예측하면 이 값은 0.83(5/6)으로 설정됩니다.
full_valid_loss 각 epoch의 끝에서 계산된 유효성 검사 손실입니다. 학습이 잘되면 손실이 줄어들 것입니다.
full_valid_mean_token_accuracy 각 epoch의 끝에서 계산된 유효한 평균 토큰 정확도입니다. 학습이 잘 진행되면 토큰 정확도가 높아져야 합니다.

Azure OpenAI Studio에서 results.csv 파일의 데이터를 플롯으로 볼 수도 있습니다. 학습된 모델에 대한 링크를 선택하면 손실, 평균 토큰 정확도 및 토큰 정확도의 세 가지 차트가 표시됩니다. 유효성 검사 데이터를 제공한 경우 두 데이터 세트가 모두 동일한 플롯에 나타납니다.

시간이 지남에 따라 손실이 감소하고 정확도가 증가하는지 확인합니다. 학습 데이터와 유효성 검사 데이터 사이에 차이가 있는 경우 이는 과잉 맞춤을 의미할 수 있습니다. 더 적은 epoch 또는 더 작은 학습 속도 승수를 사용하여 학습을 시도합니다.

배포, 사용자 지정 모델 및 학습 파일 정리

사용자 지정 모델을 완료했으면 배포 및 모델을 삭제해도 됩니다. 원한다면 서비스에 업로드한 학습 및 유효성 검사 파일까지 삭제해도 됩니다.

모델 배포 삭제

다음과 같은 다양한 방법으로 사용자 지정 모델의 배포를 삭제할 수 있습니다.

사용자 지정 모델 삭제

마찬가지로 다양한 방법으로 사용자 지정 모델을 삭제할 수 있습니다.

참고 항목

기존 배포가 있는 사용자 지정 모델은 삭제할 수 없습니다. 사용자 지정 모델을 삭제하려면 모델 배포부터 삭제해야 합니다.

학습 파일 삭제

필요에 따라 Azure OpenAI 구독에서 학습을 위해 업로드한 학습 및 유효성 검사 파일과 학습 중에 생성된 결과 파일을 삭제할 수 있습니다. 다음 방법을 사용하여 학습, 유효성 검사 및 결과 파일을 삭제할 수 있습니다.

연속 미세 조정

미세 조정된 모델을 만든 후에는 추가 미세 조정을 통해 시간이 지남에 따라 모델을 계속 구체화할 수 있습니다. 지속적인 미세 조정은 이미 미세 조정된 모델을 기본 모델로 선택하고 새로운 학습 예제 집합에서 추가로 미세 조정하는 반복적인 프로세스입니다.

이전에 미세 조정한 모델에 대해 미세 조정을 수행하려면 사용자 지정 모델 만들기에 설명된 것과 동일한 프로세스를 사용하지만 일반 기본 모델의 이름을 지정하는 대신 이미 미세 조정된 모델의 ID를 지정합니다. 미세 조정된 모델 ID는 gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7과(와) 같습니다.

curl -X POST $AZURE_OPENAI_ENDPOINT/openai/fine_tuning/jobs?api-version=2023-12-01-preview \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
    "model": "gpt-35-turbo-0613.ft-5fd1918ee65d4cd38a5dcf6835066ed7", 
    "training_file": "<TRAINING_FILE_ID>", 
    "validation_file": "<VALIDATION_FILE_ID>",
    "suffix": "<additional text used to help identify fine-tuned models>"
}'

또한 suffix 매개 변수를 포함하여 미세 조정된 모델의 여러 반복을 더 쉽게 구분할 수 있도록 하는 것이 좋습니다. suffix은(는) 문자열을 사용하고 미세 조정된 모델을 식별하도록 설정됩니다. 접미사는 미세 조정된 모델 이름에 추가될 최대 40자(a-z, A-Z, 0-9 및 _)를 포함할 수 있습니다.

미세 조정된 모델의 ID가 확실하지 않은 경우 이 정보는 Azure OpenAI Studio의 모델 페이지에서 찾거나 REST API를 사용하여 지정된 Azure OpenAI 리소스에 대한 모델 목록을 생성할 수 있습니다.

문제 해결

미세 조정을 사용하도록 설정하려면 어떻게 해야 하나요? Azure OpenAI Studio에서 사용자 지정 모델을 회색으로 표시하시겠습니까?

미세 조정에 성공적으로 액세스하려면 Cognitive Services OpenAI 기여자가 할당되어야 합니다. 고급 서비스 관리자 권한이 있는 사용자도 미세 조정에 액세스하기 위해 이 계정을 명시적으로 설정해야 합니다. 자세한 내용은 역할 기반 액세스 제어 지침을 검토하세요.

업로드가 실패한 이유는 무엇인가요?

Azure OpenAI Studio에서 파일 업로드가 실패하면 Azure OpenAI 스튜디오의 "데이터 파일"에서 오류 메시지를 볼 수 있습니다. "오류"라고 표시된 곳(상태 열 아래) 위에 마우스를 올리면 실패에 대한 설명이 표시됩니다.

미세 조정 오류 메시지 스크린샷.

미세 조정된 모델이 개선되지 않은 것 같습니다.

  • 시스템 메시지 누락: 미세 조정 시 시스템 메시지를 제공해야 합니다. 미세 조정된 모델을 사용할 때 동일한 시스템 메시지를 제공하고 싶을 것입니다. 다른 시스템 메시지를 제공하면 미세 조정한 것과 다른 결과가 나타날 수 있습니다.

  • 데이터가 충분하지 않음: 파이프라인을 실행하려면 최소 10개이지만 모델에 새로운 기술을 가르치려면 수십에서 수천 개의 데이터 포인트가 필요합니다. 데이터 포인트가 너무 적으면 과잉 맞춤이 발생하고 일반화가 제대로 이루어지지 않을 위험이 있습니다. 미세 조정된 모델은 학습 데이터에서는 좋은 성능을 보일 수 있지만 학습 패턴 대신 학습 예를 기억했기 때문에 다른 데이터에서는 성능이 좋지 않을 수 있습니다. 최상의 결과를 얻으려면 수백 또는 수천 개의 데이터 포인트가 포함된 데이터 세트를 준비하도록 계획합니다.

  • 잘못된 데이터: 제대로 큐레이팅되지 않았거나 대표성이 없는 데이터 세트는 낮은 품질의 모델을 생성합니다. 모델은 데이터 세트에서 부정확하거나 바이어스된 패턴을 학습할 수 있습니다. 예를 들어, 고객 서비스를 위해 챗봇을 학습하지만 하나의 시나리오(예: 항목 반환)에 대한 학습 데이터만 제공하는 경우 다른 시나리오에 응답하는 방법을 알 수 없습니다. 또는 학습 데이터가 잘못된 경우(잘못된 응답 포함) 모델은 잘못된 결과를 제공하도록 학습합니다.

다음 단계