데이터 과학 및 AI 빠른 작업을 사용하여 GPU에서 오픈 소스 LLM 미세 조정 및 배포

소개

이 사용지침서에서는 Oracle Cloud Infrastructure(OCI) Data Science 서비스를 사용하여 Data Science에서 제공하는 AI 빠른 작업 기능을 사용하여 오픈 소스 LLM을 미세 조정하는 과정을 안내합니다. 간편한 포인트 앤 클릭 방식으로 AI Quick Actions를 사용하여 Hugging Face에서 제공하는 미스트랄 LLM을 미세 조정하고, NVIDIA가 발표한 FAQ에서 해당 LLM을 미세 조정합니다. 그런 다음 AI Quick Actions를 사용하여 OCI에서 튜닝된 모델을 A10 GPU 형태로 배포할 수 있습니다. 그런 다음 Jupyter 노트북에서 실행되는 Python 코드를 사용하여 튜닝된 모델의 출력에 NVIDIA 교육 데이터와 유사한 원하는 스타일과 톤이 있음을 보여줍니다.

목표

필수 조건

작업 1: Data Science 노트북 세션 프로비전

  1. OCI 콘솔을 사용하여 Data Science 프로젝트를 생성합니다.

  2. 해당 프로젝트로 이동하여 ECPU가 두 개 이상인 Data Science 노트북 세션을 생성합니다.

  3. 해당 노트북 세션을 열고 확장을 누릅니다.

  4. Data Science에서 터미널 세션을 시작합니다.

  5. 해당 터미널을 사용하여 이 자습서에서 사용할 Jupyter 노트북이 포함된 github 저장소를 복제합니다.

    git clone https://github.com/oracle-nace-dsai/quick-actions-demo-archive.git
    
  6. NVIDIA 복제 FAQ:

    git clone https://huggingface.co/datasets/ajsbsd/nvidia-qa
    
    
  7. 첫 번째 저장소의 데이터 디렉토리에 NVIDIA FAQ 복사

    cp nvidia-qa/NvidiaDocumentationQandApairs.csv quick-actions-demo-archive/data/.
    
    
  8. General Machine Learning for CPUs on Python 3.11 conda를 설치한 후 활성화합니다.

    odsc conda install -s generalml_p311_cpu_x86_64_v1 
    conda activate /home/datascience/conda/generalml_p311_cpu_x86_64_v1
    
  9. https://github.com/oracle-samples/oci-data-science-ai-samples/blob/main/ai-quick-actions/model-deployment-tips.md#using-python-sdk-without-streaming당 LangChain 설치

    pip install langgraph "langchain>=0.3" "langchain-community>=0.3" "langchain-openai>=0.2.3" "oracle-ads>2.12"
    

작업 2: Hugging Face 계정 설정

  1. https://huggingface.co.에서 Hugging Face 계정 만들기

  2. Hugging Face 계정 > 액세스 토큰으로 이동하여 다음 권한을 확인한 새 사용자 액세스 토큰을 생성합니다.

    • 개인 네임스페이스 아래의 모든 저장소 콘텐츠에 대한 읽기 액세스 권한
    • 액세스할 수 있는 모든 공용 게이트 저장소의 콘텐츠에 대한 읽기 액세스 권한
  3. Data Science 터미널 세션을 사용하여 Hugging Face로 사용자 액세스 토큰을 기록합니다.

    git config --global credential.helper store
    huggingface-cli login
    
    

작업 3: 오브젝트 스토리지 버킷 생성

Data Science 노트북과 동일한 지역 및 컴파트먼트에 오브젝트 스토리지 버킷을 생성합니다.

작업 4: 로깅 설정

로그 그룹, 사용자정의 로그 생성 순으로 생성합니다.

작업 5: 데이터 과학의 AI 빠른 작업을 사용하여 미세 조정 없이 A10 GPU 구성에 LLM 배포

  1. Data Science 노트북 > 실행기 > AI 빠른 작업으로 이동합니다.

    a. Mistral 모델
    b를 검색합니다. mistralai/Mistral-7B-Instruct-v0.3 타일
    c를 누릅니다. 위의 로그가 선택된 상태로 배치를 누릅니다.

  2. 모델 배치는 약 15분 정도 걸립니다. 터미널에서 로그 열기를 선택하여 배치 로그를 모니터할 수 있습니다.

  3. 모델 배포가 완료된 후 배포 > <직접 배포된 모델> > 모델 테스트로 이동하여 다음과 같은 간단한 질문으로 해당 모델을 재생 테스트합니다.

    Who wrote the Harry Potter book series?
    
    
  4. 일부 간단한 LLM은 다음 테스트 질문에 올바르게 답변하지 못할 수 있지만 Mistral-7B-Instruct-v0.3는 이러한 질문에 답하는 데 매우 적합한 작업을 수행합니다.

    A bat and a ball cost $1.10 in total. The bat costs $1.00 more than the ball. How much does the ball cost?
    Every cat has four legs. My pet has four legs. Is my pet a cat?
    Who is President of the United States? 
    

작업 6: 배치된 모델의 끝점과 상호 작용

  1. 배치 > <직접 배치된 모델> 모델 호출로 이동하여 배치된 모델의 끝점을 확인합니다. 그런 다음 Data Science 터미널을 사용하여 해당 끝점을 셸 변수로 저장합니다. 예:

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  2. 배치된 모델의 끝점으로 프롬프트를 전송합니다.

    prompt="Who is President of the United States?"
    request_body='{"model":"odsc-llm","prompt":"'$prompt'","max_tokens":100,"temperature":0.1,"top_k":50,"top_p":0.99,"stop":[],"frequency_penalty":0,"presence_penalty":0}'
    oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal
    
  3. 이 Bash 루프를 사용하여 10초 내에 모델의 끝점을 100회 호출합니다.

    for i in $(seq 1 100); do
         oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal &
         echo $i
         sleep 0.1
      done
    
    
  4. 배치 > <직접 배치된 모델> > 로그로 이동하여 방금 모델의 끝점으로 전송된 트래픽을 확인합니다.

img.png

그림 log_traffic.png에 대한 설명

작업 7: AI 빠른 작업을 사용하여 LLM 미세 조정

이전 작업은 미세 조정 없이 Mistral LLM을 배포했습니다. 이 작업은 동일한 LLM을 미세 조정한 후 배치합니다. 작업 9는 모델의 출력, 튜닝 및 튜닝되지 않은 결과를 모두 비교합니다. 이 작업과 다음 작업은 이 코드 아카이브에서 다운로드한 두 개의 Jupyter 노트북도 사용합니다.

  1. Data Science 노트북의 파일 브라우저를 사용하여 quick-actions-demo-archive 폴더로 이동하고 prep_data.ipynb Jupyter 노트북을 엽니다.

  2. generalml_p311_cpu_x86_64_v1 커널을 선택합니다.

  3. 노트북이 테넌시/네임스페이스 및 오브젝트 스토리지 버킷을 참조하도록 노트북의 두번째-마지막 단락을 개정합니다.

  4. 다음 작업을 수행할 prep_data.ipynb Jupyter 노트북을 실행합니다.

    • data/NvidiaDocumentationQandApairs.csv 파일에서 NVIDIA FAQ를 읽어보십시오.
    • AI 빠른 작업에서 예상되는 promptcompletion 필드가 있는 JSON 레코드로 CSV FAQ를 재구성합니다.
    • 해당 데이터의 90:10 분할을 train:test 샘플로 수행합니다.
    • 교육 샘플을 Object Storage의 quick_actions/tuning_data/tune_sample.jsonl 파일로 푸시합니다.
  5. AI 빠른 작업 > 모델 > mistralai/Mistral-7B-Instruct-v0.3으로 이동합니다. 그런 다음 다음 다음 설정을 사용하여 Fine-Tune을 누릅니다.

    • 오브젝트 스토리지 경로 = quick_actions/tuning_data/tune_sample.jsonl
    • 검증 분할 = 20%
    • 결과 오브젝트 스토리지 경로 = quick_actions/tuning_results
    • 구성 = BM.GPU.A10.4(사용 가능 여부가 있는 경우) 그렇지 않은 경우 10.2 또는 10.1 구성을 사용합니다.
    • 로그 그룹로그 선택
  6. 다음 설정으로 고급 구성 표시를 사용으로 설정합니다.

    • batch_size = 64
    • sequence_len = 256
    • learning_rate = 0.000025
    • epochs = 12
  7. 미세 조정은 A10.2에서 약 60분 정도 걸리므로 터미널에서 로그 열기를 눌러 미세 조정 작업의 로그를 모니터합니다.

  8. 측정항목 섹션에서 미세 조정된 모델의 학습 곡선을 봅니다. 잘 튜닝된 모델에는 검증 손실 곡선이 있으며, 그 다음에는 시기가 늘어나는 고원이 내려집니다. img.png

그림 learning_curve.png에 대한 설명

작업 8: 미세 조정된 LLM 배치

  1. 다음 설정을 사용하여 AI 빠른 작업 > 미리 튜닝된 모델 > <단순 튜닝된 모델> > 배포로 이동합니다.

    • 컴퓨트 구성 = VM.GPU.A10.1
    • 로그 그룹로그를 선택합니다.
  2. 터미널에서 로그 열기를 눌러 배치 로그를 모니터합니다.

작업 9: 미세 조정된 LLM 배치 테스트

  1. 모델 배치가 완료된 후 배치 > <적절하게 튜닝된 모델> > 모델 테스트로 이동하여 prep_data.ipynb 노트북에 표시되는 테스트 샘플 질문의 질문을 사용하여 playtest를 수행합니다.

    What benefits does Unified Memory bring to complex data structures and classes?
    
    
  2. 모델의 끝점을 터미널 세션의 셸 변수에 복사/붙여넣습니다.

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  3. 배치된 모델의 끝점으로 프롬프트를 전송합니다.

    prompt="What benefits does Unified Memory bring to complex data structures and classes?"
    request_body='{"model":"odsc-llm","prompt":"'$prompt'","max_tokens":100,"temperature":0.1,"top_k":50,"top_p":0.99,"stop":[],"frequency_penalty":0,"presence_penalty":0}'
    oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal
    
  4. 이 Bash 루프를 사용하여 모델 끝점을 100회 호출합니다.

    for i in $(seq 1 100); do
       oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal &
       echo $i
       sleep 0.1
    done
    
  5. 미세 조정/배치된 모델의 로그를 눌러 해당 모델의 끝점에 대한 최근 트래픽을 확인합니다.

  6. compare_models.ipynb Jupyter 노트북을 열고 [8] 단락을 업데이트하여 튜닝 및 튜닝되지 않은 두 모델의 끝점을 참조합니다.

  7. 다음 작업을 수행할 노트북을 실행합니다.

    • FAQ 레코드의 테스트 샘플을 참조하십시오.
    • python을 사용하여 다섯 가지 테스트 질문을 미세 조정 및 조정되지 않은 모델의 엔드포인트에 공급하고 응답을 비교합니다.
    • python을 사용하여 배포된 모델의 엔드포인트를 호출하는 방법을 보여주는 [10] 단락을 참고하십시오. img.png

      그림 call_endpoint.png에 대한 설명

  8. 이 테스트의 주요 결과를 검토합니다.

    • 미세 조정된 LLM의 응답에는 실제 NVIDIA가 작성한 FAQ 답변과 상당히 유사한 어조, 스타일, 길이가 있습니다.
    • 튜닝되지 않은 LLM의 응답은 훨씬 상세하며 부정확할 가능성이 높은 많은 불필요한 명령문을 포함합니다.
    • 미세 조정된 LLM과 튜닝되지 않은 LLM의 응답은 그렇지 않은 것보다 더 자주 부정확합니다.
    • 훨씬 더 큰 데이터 세트를 미세 조정하면 응답의 정확도가 높아질 수 있습니다.

작업 10: 리소스 삭제

  1. AI 빠른 작업 > 배포로 이동하여 모델 배포를 삭제합니다.

  2. AI 빠른 작업 > 모델 > 미세 조정 모델로 이동하여 삭제합니다.

  3. OCI 콘솔 페이지를 사용하여 Data Science 노트북 세션으로 이동하고 종료를 수행합니다.

  4. 작업을 누르고 미세 조정 작업을 삭제합니다.

  5. Data Science 프로젝트를 삭제합니다.

  6. OCI 콘솔 페이지에서는 오브젝트 스토리지 버킷으로 이동하여 삭제할 수 있습니다.

  7. OCI 콘솔을 사용하여 로그 및 로그 그룹을 삭제합니다.

승인

추가 학습 자원

docs.oracle.com/learn에서 다른 랩을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 education.oracle.com/learning-explorer를 방문하여 Oracle Learning Explorer가 되십시오.

제품 설명서는 Oracle Help Center를 참조하십시오.