주:
- 이 자습서에서는 Oracle Cloud에 액세스해야 합니다. 무료 계정에 등록하려면 Oracle Cloud Infrastructure Free Tier 시작하기를 참조하십시오.
- Oracle Cloud Infrastructure 자격 증명, 테넌시 및 구획에 예제 값을 사용합니다. 실습을 완료했으면 이러한 값을 자신의 클라우드 환경과 관련된 값으로 대체하십시오.
dstack을 사용하여 Oracle Cloud Infrastructure에서 대규모 언어 모델을 미세 조정하고 제공
소개
dstack는 AI(인공 지능) 컨테이너 통합관리를 간소화하고 분산 교육 및 LLM(대형 언어 모델) 배포에 보다 쉽게 액세스할 수 있는 오픈 소스 도구입니다. dstack과 Oracle Cloud Infrastructure(OCI)를 결합하면 분산형 교육 및 확장 가능한 모델 배포를 위한 클라우드 인프라 설정 프로세스를 간소화할 수 있습니다.
dstack 작동 방법
dstack는 모든 클라우드 또는 데이터 센터에 AI 모델의 개발, 교육 및 배포를 위한 통합 인터페이스를 제공합니다. 예를 들어, 배치할 교육 작업 또는 모델에 대한 구성을 지정할 수 있으며, dstack가 필요한 기반 구조를 설정하고 컨테이너를 조정합니다. dstack가 제공하는 장점 중 하나는 하드웨어, 프레임워크 및 스크립트를 사용할 수 있다는 것입니다.
목표
-
OCI에서
dstack를 사용하여 LLM 모델을 미세 조정하고, Hugging Face Alignment Handbook의 모범 사례를 통합하고, Hugging Face Text Generation Inference(TGI)를 사용하여 모델을 배포합니다.참고: 튜토리얼에 설명된 실험에서는 각각 2개의 A10 GPU가 있는 3개의 노드로 구성된 OCI 클러스터를 사용하여 Gemma 7B 모델을 미세 조정합니다.
필요 조건
-
OCI 테넌시에 액세스합니다.
-
NVIDIA GPU가 포함된 구성(예: A10 GPU)에 액세스합니다(예:
VM.GPU.A10.2). 제한 증가 요청에 대한 자세한 내용은 서비스 제한을 참조하십시오. -
Gemma 7B 모델을 다운로드하도록 구성된 액세스 토큰이 있는 Hugging Face 계정입니다.
작업 1: OCI를 사용하여 dstack 설정
-
다음 명령을 사용하여
dstackPython 패키지를 설치합니다.dstack는 여러 클라우드 제공업체를 지원하므로 OCI로 범위를 좁힐 수 있습니다.pip install dstack[oci] -
~/.dstack/server/config.yml파일 내에서 OCI 특정 인증서를 구성합니다. 다음 코드는 OCI CLI(명령행 인터페이스)에 대한 인증서가 구성되어 있다고 가정합니다. 기타 구성 옵션은 dstack documentation을 참조하십시오.projects: - name: main backends: - type: oci creds: type: default -
다음 명령을 사용하여
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 -
프로젝트 스크립트가 있는 폴더로 전환하고 다음 명령을 사용하여
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_TOKEN 및 WANDB_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
# ...
-
모델 인수:
model_name_or_path: Google의 Gemma 7B가 기본 모델로 선택됩니다.tokenizer_name_or_path: 정렬 핸드북은 선택한 토큰화기의apply_chat_template()메소드를 사용합니다. 이 자습서에서는 Gemma 7B의 표준 대화 템플리트 대신 ChatML 템플리트를 사용합니다.torch_dtype및bnb_4bit_quant_storage: FSDP+QLoRA 미세 조정 방법을 활용하려는 경우 이러한 두 값은 동일하게 정의되어야 합니다. Gemma 7B는 단일 A10 GPU에 맞추기가 어렵기 때문에 이 자습서에서는 FSDP+QLoRA를 사용하여 QLoRA 기술을 활용하면서 모델을 2 x A10 GPU로 샤딩합니다.
-
LoRA 인수: LoRA 특정 구성. 이 자습서 게시물은 FSDP+QLoRA 기술을 활용하므로
load_in_4bit는true로 설정됩니다. 다른 구성은 실험마다 다를 수 있습니다. -
데이터 교육 인수: Amod의 정신 건강 상담 대화 데이터 세트를 기반으로 한 데이터 세트를 준비했습니다. 정렬 핸드북은 토큰화기의
apply_chat_template()메소드로 해석할 수 있는[{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}, ...]형식의 데이터만 이해하므로 준비된 데이터 집합은 기본적으로 원래 데이터 집합을apply_chat_template()호환 형식으로 변환하는 것입니다.
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_type:FSDP는 단일 GPU에 맞지 않는 대규모 모델을 학습시킬 수 있는 기술인 FFSDP(Fully Sharded Data Parallel)의 사용을 나타냅니다.fsdp_config: 모델 샤딩 방법(fsdp_sharding_strategy) 및 매개변수가 CPU로 오프로드되는지 여부(fsdp_offload_params) 등 FSDP 작동 방식을 설정합니다.

distributed_type의 FSDP 및 fsdp_config의 fsdp_sharding_strategy의 FULL_SHARD를 사용하면 단일 머신의 여러 GPU에 걸쳐 모델이 샤딩됩니다. 여러 컴퓨트 노드를 처리할 때 각 노드는 동일한 모델 복사본을 호스트합니다. 이 복사본은 해당 노드 내의 여러 GPU에 분할됩니다. 즉, 각 노드의 각 분할된 모델 인스턴스가 데이터 세트의 여러 섹션 또는 뱃치를 처리합니다. 여러 노드에 걸쳐 여러 GPU에 단일 모델을 분산하려면 fsdp_sharding_strategy 매개변수를 HYBRID_SHARD로 구성합니다.
machine_rank, num_machines 및 num_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
강조할 주요 사항::
- 완벽한 통합:
dstack는 Hugging Face 오픈 소스 에코시스템과 손쉽게 통합됩니다. 특히fsdp_qlora_full_shard.yaml에서 정상적으로 정의한 구성으로 가속화 라이브러리를 사용하면 됩니다. - 자동 구성:
DSTACK_MASTER_NODE_IP,DSTACK_NODE_RANK,DSTACK_GPUS_NUM및DSTACK_NODES_NUM변수는dstack에 의해 자동으로 관리되므로 수동 설정이 줄어듭니다. - 리소스 할당:
dstack를 사용하면 미세 조정 작업에 대한 노드 및 GPU 수(gpu: 1..2)를 쉽게 지정할 수 있습니다. 따라서 이 자습서에는 각각 2 x A10(24GB) GPU가 장착된 세 개의 노드가 있습니다.
작업 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
이 접근 방식의 주요 이점:
- 보안 HTTPS 게이트웨이:
dstack는 프로덕션 레벨 모델 서빙의 중요한 측면인 게이트웨이를 통한 보안 HTTPS 연결 설정 프로세스를 간소화합니다. - 추론에 최적화: TGI 프레임워크는 효율적인 텍스트 생성 추론을 위해 설계되어 모델이 응답성이 높고 신뢰할 수 있는 결과를 제공하도록 보장합니다.
- 자동 스케일링:
dstack에서는 최소 및 최대 모델 복제본 수를 포함하여 자동 스케일링 정책을 지정할 수 있습니다.
이 시점에서 표준 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 프레임워크와의 통합을 통해 모델을 미세 조정하고 원활하게 제공할 수 있으므로 성능에 최적화되고 실제 애플리케이션에 대비할 수 있습니다. 우리는 자연어 처리의 세계에서 원하는 결과를 달성하기 위해 가능성을 더 탐구하고 다양한 모델과 구성을 실험하는 것이 좋습니다.
확인
- 작가 - Chansung Park(HuggingFace 동료 - AI 연구원), Yann Caniou(AI Infra/GPU 전문가), Bruno Garbaccio(AI Infra/GPU 전문가)
추가 학습 자원
docs.oracle.com/learn에서 다른 실습을 탐색하거나 Oracle Learning YouTube 채널에서 더 많은 무료 학습 콘텐츠에 액세스하세요. 또한 Oracle Learning Explorer가 되려면 education.oracle.com/learning-explorer을 방문하십시오.
제품 설명서는 Oracle Help Center를 참조하십시오.
Fine-Tune and Serve Large Language Models on Oracle Cloud Infrastructure with dstack
G11978-01
July 2024