주:
- 이 자습서에서는 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
설정
-
다음 명령을 사용하여
dstack
Python 패키지를 설치합니다.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