附註:
- 此教學課程需要存取 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 手冊的最佳實務,並使用 Hugging Face Text Generation Inference (TGI) 部署模型。注意:教學課程中描述的實驗使用三個節點的 OCI 叢集,每個節點各有 2 個 A10 GPU,以微調 Gemma 7B 模型。
必要條件
-
存取 OCI 租用戶。
-
使用 NVIDIA GPU 存取資源配置,例如 A10 GPU (例如
VM.GPU.A10.2
)。如需有關提高限制之要求的詳細資訊,請參閱服務限制。 -
Hugging Face 帳戶,其存取權杖設定為下載 Gemma 7B 模型。
工作 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 手冊確保註冊成立最佳微調做法。本教學課程的原始程式碼可從以下網址取得:GitHub 。讓我們深入實用的步驟來微調您的 LLM。
一旦您切換至專案資料夾,請使用下列命令起始 OCI 上的微調工作 (使用 dstack
)。
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()
方法。本教學課程使用 ChatML 樣板,而非 Gemma 7B 的標準對話樣板。torch_dtype
和bnb_4bit_quant_storage
:如果想要使用 FSDP+QLoRA 微調方法,這兩個值的定義應該是相同的。由於 Gemma 7B 難以放入單一 A10 GPU,因此本教學課程使用 FSDP+QLoRA 將模型分區為 2 x A10 GPU,同時利用 QLoRA 技術。
-
LoRA 引數:LoRA 特定組態。由於此教學課程文章利用 FSDP+QLoRA 技術,因此
load_in_4bit
設為true
。其他組態可能因實驗而異。 -
資料訓練引數:我們準備了以 Amod 心理健康諮詢對話資料集為基礎的資料集。由於 alignment-handbook 只能瞭解
[{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}, …]
格式的資料 (可解譯記號器的apply_chat_template()
方法),因此已準備的資料集基本上是將原始資料集轉換成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
表示使用「完全分區資料平行 (FSDP)」,此技術可讓訓練不適合單一 GPU 的大型模型。fsdp_config
:這些設定 FSDP 的運作方式,例如模型的分區方式 (fsdp_sharding_strategy
),以及參數是否卸載至 CPU (fsdp_offload_params
)。
使用 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
讓我們探索將所有項目放在一起的 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 個 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 的 Inference Client 程式庫與服務互動。例如,下列程式碼片段會顯示 Curl 的範例。
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 的對齊手冊和 TGI 架構整合,可讓您順暢地微調和服務模型,確保模型針對效能進行最佳化,並準備好進行實際的應用系統。我們鼓勵您進一步探索可能性,並對不同的模型和組態進行實驗,以實現自然語言處理世界的期望結果。
認可
- 作者 - Chansung Park (HuggingFace fellow - AI 研究人員)、Yann Caniou (AI Infra/GPU 專家)、Bruno Garbaccio (AI Infra/GPU 專家)
其他學習資源
瀏覽 docs.oracle.com/learn 的其他實驗室,或前往 Oracle Learning YouTube 頻道存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。
如需產品文件,請造訪 Oracle Help Center 。
Fine-Tune and Serve Large Language Models on Oracle Cloud Infrastructure with dstack
G11982-01
July 2024