本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 vLLM 執行批次 LLM 推論
本教學課程將引導您使用 GitHub 上的 vLLM 推論引擎,在提示的 JSONL 檔案上執行高輸送量大型語言模型 (LLM) 推論
套件可處理離線、尷尬且平行的工作負載:內容產生、評估資料集、翻譯、擷取和分類。它適合您需要模型來回應許多獨立提示,而不需要即時 API 伺服器的任何位置。在幕後,它會使用截止日期雲端任務區塊功能,將提示分組為批次任務,這可讓您使用單一ChunkSize參數來平行處理排程額外負荷。如需詳細資訊,請參閱任務範本的任務區塊。
載入 7B-parameter LLM 需要 30 秒或更多,因此支付每個任務的成本將主導批次執行時間。開啟任務描述步驟環境解決此問題:vLLM 伺服器會在工作者取得任務時啟動,並在工作者執行的每個任務中保持載入狀態,然後使用工作階段關閉。4 個工作者機群上的 24 個提示批次會支付 4 個模型負載,而不是 24 個模型負載。
預估時間:30-60 分鐘,包括陣列設定。
執行本教學課程會產生處理任務的 GPU 工作者執行個體費用。
概觀
若要完成本教學課程,請遵循下列步驟:
-
設定您的陣列。
-
準備輸入檔案。
-
提交批次推論任務。
-
下載並檢視結果。
-
清除資源。
設定您的陣列
取得相容陣列的最快方法是在 GitHub 上部署 CUDA 陣列 CloudFormation 範本CREATE_COMPLETE,設定截止日期雲端 CLI 以使用新的陣列:
deadline config set defaults.farm_idFarmId-from-stack-outputsdeadline config set defaults.queue_idCUDAQueueId-from-stack-outputs
如果您已有陣列,則需要具有 NVIDIA GPUs 和至少 32 GB RAM 的服務受管機群,以及連接讀取CondaPackages和CondaChannels任務參數之 Conda 佇列環境的佇列。
準備輸入檔案
輸入是 JSONL 檔案,每行一個 JSON 物件。每一行都必須有 prompt 欄位:
{"prompt": "What is photosynthesis?", "id": "001"} {"prompt": "Write a haiku about clouds.", "id": "002"} {"prompt": "Explain gravity to a 5 year old.", "id": "003", "max_tokens": 256, "temperature": 0.9}
每個提示的選用欄位包括id用於追蹤、max_tokens限制回應長度,以及temperature控制抽樣隨機性。每個提示欄位只會覆寫該行的任務層級預設值,而任何其他欄位都會以不變的方式傳遞至輸出。
套件包含用於建置輸入檔案的零相依性 HTML 工具。在瀏覽器tools/prompt_builder.html中開啟 以新增提示、設定每個提示選項,以及匯出為 JSONL。
提交批次推論任務
使用 GUI 提交者提交
-
從
vllm_batch套件目錄中,開啟提交者:deadline bundle gui-submit . -
選擇您的輸入 JSONL 檔案。
-
設定提示範圍 (例如,
1-10針對 檔案的前 10 個提示)。 -
設定區塊大小,這是每個任務處理的提示數目 (預設
5)。 -
選擇輸出目錄,然後選擇提交。
或者,使用 CLI 提交:
deadline bundle submit . \ --parameter InputFile=prompts.jsonl\ --parameter Prompts=1-10 \ --parameter ChunkSize=5 \ --parameter OutputDir=$PWD/results
ModelName 參數預設為 Qwen/Qwen2.5-7B-Instruct並接受任何 Hugging Face 模型 ID。Prompts 參數接受完整的 Open Job Description 整數範圍語法,例如2,5,8-9用於特定行或僅4,7重新執行失敗行。您也可以讓 Deadline Cloud 自動調整區塊大小,而不是修正區塊大小:TargetRuntimeSeconds將 設定為您希望每個區塊採取的時間長度 (預設 120 秒),而排程器會在未來的任務上擴展或縮減區塊大小以達成目標。如需完整參數清單,請參閱 GitHub 上 README 範例的參數表
下載並檢視結果
下載並檢視結果
-
任務完成後,下載輸出:
deadline job download-output --job-idjob-id -
所有輸出都會落在所選目錄中的
output/子資料夾中。在瀏覽器results/output/results.html中為視覺效果結果檢視器開啟 ,或results/output/output.jsonl為原始合併輸出讀取 。
每個輸出行都帶有原始提示及其傳遞欄位,加上generated_text回應、完成原因和字符計數:
{"prompt": "What is photosynthesis?", "id": "001", "generated_text": "Photosynthesis is...", "finish_reason": "stop", "prompt_tokens": 7, "completion_tokens": 42}
將輸出鏈結至批次映像產生
output.jsonl 檔案是text-to-image批次套件的現成輸入。使用此套件產生文字 (標語、字幕、場景描述),然後將輸出檔案提交至影像產生套件,該套件會自動使用每一行的 generated_text 作為複合於產生影像上的字幕。如需完整的逐步解說,請參閱 使用擴散模型批次產生映像。
清除
為了避免持續收費,請清除您為此教學課程建立的資源:
清除教學課程資源
-
如果您已部署 CUDA 陣列 CloudFormation 範本,請從 CloudFormation 主控台刪除 CloudFormation 堆疊。
-
如果您使用現有的陣列並特別為此教學課程建立 GPU 機群,請停止或刪除該機群。如果您使用預先存在的共用機群,請將其保留在原處。
-
如果您不再需要本機輸出檔案,請將其移除。
相關資源
下列資源提供其他資訊: