주:

dstack을 사용하여 Oracle Cloud Infrastructure에서 대규모 언어 모델을 미세 조정하고 제공

소개

dstack는 AI(인공 지능) 컨테이너 통합관리를 간소화하고 분산 교육 및 LLM(대형 언어 모델) 배포에 보다 쉽게 액세스할 수 있는 오픈 소스 도구입니다. dstack과 Oracle Cloud Infrastructure(OCI)를 결합하면 분산형 교육 및 확장 가능한 모델 배포를 위한 클라우드 인프라 설정 프로세스를 간소화할 수 있습니다.

dstack 작동 방법

dstack는 모든 클라우드 또는 데이터 센터에 AI 모델의 개발, 교육 및 배포를 위한 통합 인터페이스를 제공합니다. 예를 들어, 배치할 교육 작업 또는 모델에 대한 구성을 지정할 수 있으며, dstack가 필요한 기반 구조를 설정하고 컨테이너를 조정합니다. dstack가 제공하는 장점 중 하나는 하드웨어, 프레임워크 및 스크립트를 사용할 수 있다는 것입니다.

목표

필요 조건

작업 1: OCI를 사용하여 dstack 설정

  1. 다음 명령을 사용하여 dstack Python 패키지를 설치합니다. dstack는 여러 클라우드 제공업체를 지원하므로 OCI로 범위를 좁힐 수 있습니다.

    pip install dstack[oci]
    
  2. ~/.dstack/server/config.yml 파일 내에서 OCI 특정 인증서를 구성합니다. 다음 코드는 OCI CLI(명령행 인터페이스)에 대한 인증서가 구성되어 있다고 가정합니다. 기타 구성 옵션은 dstack documentation을 참조하십시오.

    projects:
    - name: main
      backends:
      - type: oci
        creds:
          type: default
    
  3. 다음 명령을 사용하여 dstack 서버를 실행합니다.

    dstack server
    INFO     Applying ~/.dstack/server/config.yml...
    INFO     Configured the main project in ~/.dstack/config.yml
    INFO     The admin token is ab6e8759-9cd9-4e84-8d47-5b94ac877ebf
    INFO     The dstack server 0.18.4 is running at http://127.0.0.1:3000
    
  4. 프로젝트 스크립트가 있는 폴더로 전환하고 다음 명령을 사용하여 dstack를 초기화합니다.

    dstack init
    

작업 2: dstack를 사용하여 OCI에서 작업 미세 조정

Gemma 7B 모델을 미세 조정하기 위해 Hugging Face Alignment Handbook을 사용하여 최상의 미세 조정 방법을 통합합니다. 이 자습서의 소스 코드는 GitHub에서 구할 수 있습니다. LLM을 미세 조정하기 위한 실제 단계를 살펴보겠습니다.

프로젝트 폴더로 전환한 후 다음 명령을 사용하여 dstack를 사용하여 OCI에서 미세 조정 작업을 시작합니다.

ACCEL_CONFIG_PATH=fsdp_qlora_full_shard.yaml \
  FT_MODEL_CONFIG_PATH=qlora_finetune_config.yaml \
  HUGGING_FACE_HUB_TOKEN=xxxx \
  WANDB_API_KEY=xxxx \
  dstack run . -f ft.task.dstack.yml

FT_MODEL_CONFIG_PATH, ACCEL_CONFIG_PATH, HUGGING_FACE_HUB_TOKENWANDB_API_KEY 환경 변수는 ft.task.dstack.yml 작업 구성 내에 정의됩니다. dstack run는 OCI의 ft.task.dstack.yml에 정의된 작업을 제출합니다.

주: 작업을 실행할 때 dstack는 현재 디렉토리 컨텐트를 자동으로 복사합니다.

각 YAML 파일의 주요 부분을 살펴보겠습니다. 전체 내용을 보려면 저장소를 확인하십시오.

qlora_finetune_config.yaml 파일은 정렬 핸드북에서 LLM(대형 언어 모델)을 미세 조정하는 방법을 이해하는 데 사용하는 레시피 구성입니다.

# Model arguments
model_name_or_path: google/gemma-7b
tokenizer_name_or_path: philschmid/gemma-tokenizer-chatml
torch_dtype: bfloat16
bnb_4bit_quant_storage: bfloat16

# LoRA arguments
load_in_4bit: true
use_peft: true
lora_r: 8
lora_alpha: 16
lora_dropout: 0.05
lora_target_modules:
  - q_proj
  - k_proj
# ...

# Data training arguments
dataset_mixer:
  chansung/mental_health_counseling_conversations: 1.0
dataset_splits:
  - train
  - test
# ...

fsdp_qlora_full_shard.yaml 파일은 기본 기반구조를 사용하여 LLM을 미세 조정하는 방법을 가속화합니다.

compute_environment: LOCAL_MACHINE
distributed_type: FSDP  # Use Fully Sharded Data Parallelism
fsdp_config:
  fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
  fsdp_backward_prefetch: BACKWARD_PRE
  fsdp_cpu_ram_efficient_loading: true
  fsdp_use_orig_params: false
  fsdp_offload_params: true
  fsdp_sharding_strategy: FULL_SHARD
  # ... (other FSDP configurations)
# ... (other configurations)

하이브리드 샤드

distributed_typeFSDPfsdp_configfsdp_sharding_strategyFULL_SHARD를 사용하면 단일 머신의 여러 GPU에 걸쳐 모델이 샤딩됩니다. 여러 컴퓨트 노드를 처리할 때 각 노드는 동일한 모델 복사본을 호스트합니다. 이 복사본은 해당 노드 내의 여러 GPU에 분할됩니다. 즉, 각 노드의 각 분할된 모델 인스턴스가 데이터 세트의 여러 섹션 또는 뱃치를 처리합니다. 여러 노드에 걸쳐 여러 GPU에 단일 모델을 분산하려면 fsdp_sharding_strategy 매개변수를 HYBRID_SHARD로 구성합니다.

machine_rank, num_machinesnum_processes와 같은 추가 매개변수는 조정에 중요합니다. 그러나 런타임 시 이러한 값을 동적으로 설정하는 것이 좋습니다. 이렇게 하면 서로 다른 기반 구조 설정 간에 전환할 때 유연성이 제공됩니다.

작업 3: 간소화된 구성을 사용하여 dstack에 기반 구조 프로비저닝(provisioning)

모든 항목을 통합하는 fsdp_qlora_full_shard.yaml 구성을 살펴보고 dstack에 인프라를 프로비전하고 작업을 실행하는 방법을 알려드립니다.

type: task
nodes: 3

python: "3.11"
env:
  - ACCEL_CONFIG_PATH
  - FT_MODEL_CONFIG_PATH
  - HUGGING_FACE_HUB_TOKEN
  - WANDB_API_KEY
commands:
  # ... (setup steps, cloning repo, installing requirements)
  - ACCELERATE_LOG_LEVEL=info accelerate launch \
      --config_file recipes/custom/accel_config.yaml \
      --main_process_ip=$DSTACK_MASTER_NODE_IP \
      --main_process_port=8008 \
      --machine_rank=$DSTACK_NODE_RANK \
      --num_processes=$DSTACK_GPUS_NUM \
      --num_machines=$DSTACK_NODES_NUM \
      scripts/run_sft.py recipes/custom/config.yaml
ports:
  - 6006
resources:
  gpu: 1..2
  shm_size: 24GB

강조할 주요 사항::

작업 4: dstack를 사용하여 미세 조정된 모델 제공

모델이 미세 조정되면 dstack는 Hugging Face Text Generation Inference(TGI) 프레임워크를 사용하여 OCI에 배포하는 것을 간소화합니다.

다음은 dstack에서 서비스를 정의하는 방법의 예입니다.

type: service
image: ghcr.io/huggingface/text-generation-inference:latest
env:
  - HUGGING_FACE_HUB_TOKEN
  - MODEL_ID=chansung/mental_health_counseling_merged_v0.1
commands:
  - text-generation-launcher \
    --max-input-tokens 512 --max-total-tokens 1024 \
    --max-batch-prefill-tokens 512 --port 8000
port: 8000

resources:
  gpu:
    memory: 48GB

# (Optional) Enable the OpenAI-compatible endpoint
model:
  format: tgi
  type: chat
  name: chansung/mental_health_counseling_merged_v0.1

이 접근 방식의 주요 이점:

이 시점에서 표준 curl 명령 및 Python 요청, OpenAI SDK 및 Hugging Face의 추론 클라이언트 라이브러리를 사용하여 서비스와 상호 작용할 수 있습니다. 예를 들어, 다음 코드 조각은 컬의 예를 보여줍니다.

curl -X POST https://black-octopus-1.mycustomdomain.com/generate \
  -H "Authorization: Bearer <dstack-token>" \
  -H 'Content-Type: application/json' \
  -d '{"inputs": "I feel bad...", "parameters": {"max_new_tokens": 128}}'

또한 배포된 모델의 경우 dstack는 모델과 직접 상호 작용할 수 있는 사용자 인터페이스를 자동으로 제공합니다.

사용자 인터페이스

다음 단계

이 자습서에 설명된 단계에 따라 dstack, OCI 및 Hugging Face 에코시스템의 결합된 기능을 사용하여 LLM을 미세 조정하고 배포하는 강력한 접근 방식을 활용할 수 있습니다. 이제 dstack의 사용자 친화적인 인터페이스를 활용하여 OCI 리소스를 효과적으로 관리할 수 있게 되었고, LLM 프로젝트를 위한 분산형 교육 환경 설정 프로세스를 간소화할 수 있게 되었습니다.

또한 Hugging Face의 Alignment Handbook 및 TGI 프레임워크와의 통합을 통해 모델을 미세 조정하고 원활하게 제공할 수 있으므로 성능에 최적화되고 실제 애플리케이션에 대비할 수 있습니다. 우리는 자연어 처리의 세계에서 원하는 결과를 달성하기 위해 가능성을 더 탐구하고 다양한 모델과 구성을 실험하는 것이 좋습니다.

확인

추가 학습 자원

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

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