發(fā)布)
前一陣子好幾個(gè)朋友陸續(xù)來問我說看到阿里開源的Qwen-Image-2.1但本地電腦顯卡根本跑不動問我有沒有辦法在云上跑起來。我第一次部署的時(shí)候也被折騰得不輕所以干脆把整個(gè)操作流程梳理成一篇文章。這篇教程不預(yù)設(shè)你已經(jīng)很懂Linux或深度學(xué)習(xí)只要有一臺能開GPU云服務(wù)器的賬號能敲命令就能一步步跟下來。文章會覆蓋從選機(jī)器、配環(huán)境、下載模型、起服務(wù)到對外開放接口的完整鏈路還會把我在實(shí)際部署中踩過的坑整理出來。我要先把話說清楚Qwen-Image-2.1是阿里巴巴開源的一個(gè)圖像生成模型基于擴(kuò)散模型架構(gòu)比較擅長中文場景的理解出圖效果和可控性都算得上第一梯隊(duì)。云端部署的意思是把這個(gè)模型放到遠(yuǎn)程的GPU服務(wù)器上運(yùn)行不用本地顯卡借助云端算力來出圖。對個(gè)人開發(fā)者和中小企業(yè)來說這是成本比較可控、又能兼顧性能的路徑。整篇會按照我實(shí)際操作的順序來寫。先聊思路和選型再說環(huán)境準(zhǔn)備然后是模型獲取和依賴安裝接著是啟動推理服務(wù)和接口封裝最后是問題排查和性能調(diào)優(yōu)。如果中間卡住了可以直接跳到對應(yīng)章節(jié)翻經(jīng)驗(yàn)總結(jié)。1. 項(xiàng)目思路拆解為什么要把模型放云端1.1 本地部署和云端部署怎么選很多人看到開源模型第一反應(yīng)是“下載到自己電腦跑”。這個(gè)思路本身沒問題但Qwen-Image-2.1這個(gè)模型的參數(shù)量不小推理生成一張圖需要的顯存通常以GB為單位計(jì)算本地如果只有8G或12G顯存的消費(fèi)級顯卡即便能跑出圖速度和分辨率上限也會讓人難受。云端部署的優(yōu)勢主要體現(xiàn)在三個(gè)層面。第一是硬件彈性今天需要用24G顯存明天只需一個(gè)輕量任務(wù)可以隨時(shí)切換機(jī)器規(guī)格。第二是并發(fā)能力本地單卡同時(shí)服務(wù)不了幾個(gè)請求云上可以通過多卡、多實(shí)例橫向擴(kuò)展。第三是協(xié)作便利接口放在云端后團(tuán)隊(duì)成員或者業(yè)務(wù)系統(tǒng)可以直接調(diào)用不用每臺機(jī)器都裝一遍環(huán)境。但這不等于說云端部署沒有代價(jià)。它需要你處理服務(wù)器安全組、端口開放、進(jìn)程守護(hù)這些跟模型本身無關(guān)的運(yùn)維事項(xiàng)。你要么用Linux命令自己折騰要么花一點(diǎn)時(shí)間學(xué)一下Docker和systemd。好在這些都算不上難按這篇文章走就行。提示如果你的場景只是臨時(shí)玩一下、出幾張圖看看效果本地部署體驗(yàn)一下也完全可以。如果你要接進(jìn)業(yè)務(wù)系統(tǒng)、要跑批量任務(wù)、要給團(tuán)隊(duì)用直接選云端。1.2 推理方案的選型邏輯部署Qwen-Image-2.1的時(shí)候有兩種主流做法一種是使用HuggingFace Diffusers庫直接加載模型寫法簡單、可控性強(qiáng)適合大多數(shù)場景另一種是使用專門的推理框架如vLLM或TensorRT-LLM來做高并發(fā)優(yōu)化適合需要大規(guī)模生產(chǎn)服務(wù)的場景。第一次上手我不太建議直接上推理框架。原因是模型本身還在快速迭代這些框架的支持列表經(jīng)常變化你在配置過程里遇到問題的概率會加大。先用Diffusers把整條鏈路跑通把依賴、顯存、接口這些摸清楚再考慮優(yōu)化這是比較穩(wěn)的節(jié)奏。還有一個(gè)容易忽視的點(diǎn)是模型權(quán)重的下載渠道。阿里的模型在ModelScope魔搭社區(qū)和HuggingFace上都有托管。如果你的云服務(wù)器在國內(nèi)直接走M(jìn)odelScope下載往往更快也更不容易出現(xiàn)網(wǎng)絡(luò)超時(shí)。這個(gè)選擇看似不重要實(shí)際部署時(shí)能幫你省下大量等待時(shí)間。2. 云端環(huán)境準(zhǔn)備從買機(jī)器到裝驅(qū)動2.1 GPU實(shí)例選型與顯存計(jì)算部署之前第一步是選云服務(wù)器。市面上的主流云平臺都提供GPU實(shí)例規(guī)格差異主要在顯卡型號、顯存大小、CPU核數(shù)和內(nèi)存。Qwen-Image-2.1的加載占用和生成過程中的臨時(shí)變量都需要GPU顯存我實(shí)測下來使用fp16精度加載完整模型權(quán)重顯存占用在20GB左右如果開啟更高分辨率生成占用還會往上走。所以選實(shí)例時(shí)我的建議是顯存至少24GB起步。常見的組合包括單張A1024GB、單張L424GB、單張409024GB、或者V10032GB。如果機(jī)器預(yù)算緊張可以考慮兩張16GB顯存的卡做張量并行但配置復(fù)雜度會明顯提高不是適合新手的路徑。CPU和內(nèi)存也別太小。模型加載和數(shù)據(jù)處理會用到內(nèi)存建議內(nèi)存不低于32GB。帶寬方面沒有特殊要求但如果你要頻繁上傳下載模型權(quán)重帶寬太小會等得很痛苦。我自己一般選擇CPU 8核以上、內(nèi)存32GB、單卡24GB顯存的配置性價(jià)比比較均衡。注意云服務(wù)器按小時(shí)計(jì)費(fèi)如果只是測試記得用完就釋放實(shí)例或關(guān)機(jī)避免產(chǎn)生不必要的費(fèi)用。部分平臺的搶占式實(shí)例價(jià)格能便宜一半以上但對穩(wěn)定性要求高的生產(chǎn)環(huán)境慎用。2.2 操作系統(tǒng)、驅(qū)動和CUDA準(zhǔn)備拿到服務(wù)器后的第一件事是確認(rèn)操作系統(tǒng)。我習(xí)慣用Ubuntu 22.04 LTS軟件源比較全遇到問題也能搜到大量解決方案。不建議用太老的版本因?yàn)樾掳姹綪yTorch和CUDA對系統(tǒng)的glibc版本有要求。接下來要裝NVIDIA驅(qū)動和CUDA?,F(xiàn)在的云廠商通常提供預(yù)裝驅(qū)動的鏡像你可以在創(chuàng)建實(shí)例時(shí)直接選擇“GPU優(yōu)化鏡像”或“深度學(xué)習(xí)基礎(chǔ)鏡像”省去折騰驅(qū)動的步驟。如果你已經(jīng)買了一臺裸系統(tǒng)可以用如下命令確認(rèn)一下顯卡狀態(tài)nvidia-smi如果提示找不到命令說明驅(qū)動還沒裝。驅(qū)動安裝方式取決于你的系統(tǒng)版本最簡單的是用云廠商提供的GPU驅(qū)動安裝腳本或者通過包管理器安裝sudo apt update sudo apt install -y nvidia-driver-535 sudo reboot驅(qū)動裝完后再運(yùn)行nvidia-smi如果能正常顯示顯卡信息和驅(qū)動版本就可以進(jìn)入下一步。CUDA版本方面PyTorch官方對CUDA 11.8和12.1都提供預(yù)編譯包我建議使用CUDA 12.1搭配最新穩(wěn)定版PyTorch。注意區(qū)分系統(tǒng)CUDA環(huán)境和PyTorch自帶CUDA運(yùn)行時(shí)的區(qū)別——PyTorch通常自帶CUDA庫系統(tǒng)裝好驅(qū)動后很多時(shí)候不需要再單獨(dú)裝完整CUDA工具包反而容易把環(huán)境搞亂。2.3 Python環(huán)境和基礎(chǔ)依賴深度學(xué)習(xí)項(xiàng)目對Python版本敏感我推薦用conda或venv創(chuàng)建獨(dú)立環(huán)境。用conda的話wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source ~/.bashrc conda create -n qwen-image python3.10 -y conda activate qwen-imagePython版本我推薦3.10或3.11。過新的3.12在某些依賴的兼容性上偶爾會翻車過老的話有些庫又不再支持。裝好Python后先升級pippip install --upgrade pip setuptools wheel然后安裝PyTorch。訪問PyTorch官網(wǎng)選擇對應(yīng)CUDA版本生成安裝命令比較典型的命令是pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121裝完可以驗(yàn)證一下GPU是否可用python -c import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))如果輸出前面是True后面是你的顯卡名稱說明深度學(xué)習(xí)環(huán)境基本就緒。這一步是整個(gè)部署中最容易出現(xiàn)差錯(cuò)的環(huán)節(jié)我見過很多人卡在PyTorch和CUDA版本不匹配上所以請務(wù)必先確認(rèn)這條命令輸出正常再繼續(xù)往下走。3. 模型獲取與核心依賴安裝3.1 從ModelScope下載Qwen-Image-2.1權(quán)重Qwen-Image-2.1的模型權(quán)重以safetensors格式發(fā)布下載前需要安裝git-lfs否則無法正確拉取大文件。如果選擇ModelScope作為下載源可以這樣操作apt install -y git git-lfs git lfs install pip install modelscope接著用Python腳本來下載比直接git clone更可控支持?jǐn)帱c(diǎn)續(xù)傳from modelscope import snapshot_download model_dir snapshot_download(Qwen/Qwen-Image-2.1, cache_dir/opt/models, allow_patterns[*]) print(model_dir)或者直接用命令行工具modelscope download --model Qwen/Qwen-Image-2.1 --local_dir /opt/models/qwen-image-2.1下載體積通常會超過30GB取決于模型版本。網(wǎng)絡(luò)條件好的情況下這個(gè)步驟需要幾十分鐘到一兩個(gè)小時(shí)。如果你的云服務(wù)器帶寬有限建議選擇ModelScope這種國內(nèi)訪問友好的平臺不要跑國外源跑到一半斷掉。提示下載前先確認(rèn)磁盤剩余空間。模型權(quán)重、Python依賴、日志加起來很容易超過60GB我自己就曾經(jīng)因?yàn)橹唤o他留了30GB空間加載半路報(bào)磁盤已滿尷尬得很。3.2 安裝Diffusers和TransformersDiffusers是加載和運(yùn)行擴(kuò)散模型的核心庫Qwen-Image-2.1在官方倉庫里明確標(biāo)注了推薦的版本范圍。為了防止版本沖突我建議先安裝最新穩(wěn)定版然后根據(jù)調(diào)整pip install diffusers transformers accelerate safetensors sentencepiece protobuf如果你的環(huán)境需要處理中文提示詞還需要一個(gè)分詞器相關(guān)的依賴。Qwen系列模型通常使用Qwen的tokenizer一般會被transformers自動處理但如果遇到分詞報(bào)錯(cuò)可以單獨(dú)安裝pip install tiktoken裝完依賴后建議做一個(gè)快速驗(yàn)證——在Python里嘗試加載模型的分詞器部分看看權(quán)重目錄里的文件是否能被正確識別。這一步不一定需要把全部參數(shù)加載到GPU只需要看是否報(bào)錯(cuò)。3.3 顯存不夠時(shí)的量化方案思考如果你的設(shè)備只有16GB顯存或者你需要在更低規(guī)格的實(shí)例上運(yùn)行可以嘗試量化方案。社區(qū)里有GGUF等量化格式也有針對Qwen-Image-2.1的int8、int4量化分支能顯著降低顯存占用。這里要提醒一句量化會帶來圖像質(zhì)量的輕微下降而且部分量化格式的加載方式與原生Diffusers不同需要額外安裝對應(yīng)推理庫。我在實(shí)測中做過一次int8量化顯存占用從原來的20G左右降到了13G左右代價(jià)是生成圖片的細(xì)節(jié)紋理略有損失。如果是出海報(bào)、示意圖這個(gè)差異幾乎看不出如果是做精細(xì)藝術(shù)創(chuàng)作還是優(yōu)先保證原生fp16推理。如果不想犧牲質(zhì)量又得控制顯存還可以啟用模型卸載offload。Diffusers提供的enable_model_cpu_offload()可以讓模型各部分按需調(diào)度到GPU配合小顯存也能跑。速度會慢一些但能穩(wěn)定出圖。本章節(jié)稍后的啟動代碼里會演示這個(gè)配置。4. 啟動推理服務(wù)從腳本到API4.1 編寫第一版推理腳本環(huán)境就緒后可以先寫一個(gè)最簡單的腳本驗(yàn)證模型能不能正常出圖。下面這段代碼是標(biāo)準(zhǔn)的Diffusers加載方式也是我第一次跑通時(shí)用的模板import torch from diffusers import QwenImagePipeline from transformers import Qwen2VLForConditionalGeneration pipe QwenImagePipeline.from_pretrained( /opt/models/qwen-image-2.1, torch_dtypetorch.float16, ) # 如果顯存不夠就啟用CPU卸載 # pipe.enable_model_cpu_offload() pipe pipe.to(cuda) prompt 一只橘貓坐在窗臺邊午后陽光灑進(jìn)來手里拿著一杯熱咖啡電影感紀(jì)實(shí)攝影風(fēng)格 negative_prompt 模糊低質(zhì)量扭曲變形多余的手指低分辨率 image pipe( promptprompt, negative_promptnegative_prompt, height1024, width1024, num_inference_steps30, guidance_scale7.5, ).images[0] image.save(/root/test_output.png) print(生成完成)幾個(gè)參數(shù)說一下我的經(jīng)驗(yàn)。num_inference_steps控制生成步數(shù)20步就能出不錯(cuò)的效果30步更精細(xì)再多的話收益遞減。guidance_scale控制提示詞的跟隨程度太高會過飽和太低會發(fā)散7到8之間是比較穩(wěn)的區(qū)間。width和height如果不是特殊需求建議保持在模型訓(xùn)練分辨率附近比如1024x1024強(qiáng)行拉大容易出重復(fù)紋理或構(gòu)圖問題。第一次跑這個(gè)腳本建議在終端前臺執(zhí)行觀察有沒有報(bào)錯(cuò)。如果成功生成圖片會輸出“生成完成”并且你能在指定路徑看到一張圖。到這個(gè)節(jié)點(diǎn)最核心的部署難點(diǎn)已經(jīng)跨過去了。4.2 用FastAPI把模型封裝成HTTP接口腳本能出圖之后下一步就是對外提供服務(wù)。這里用FastAPI做一個(gè)輕量封裝把生成邏輯放到接口里業(yè)務(wù)系統(tǒng)就能通過HTTP調(diào)用。以下是我用過的完整示例from fastapi import FastAPI, HTTPException from pydantic import BaseModel, Field import torch from diffusers import QwenImagePipeline import uuid import os app FastAPI(titleQwen-Image-2.1 API, version1.0.0) class GenerateRequest(BaseModel): prompt: str Field(..., description圖像描述) negative_prompt: str Field(, description負(fù)面提示詞) width: int Field(1024, ge256, le2048) height: int Field(1024, ge256, le2048) num_inference_steps: int Field(30, ge10, le100) guidance_scale: float Field(7.5, ge1.0, le20.0) MODEL_PATH /opt/models/qwen-image-2.1 OUTPUT_DIR /data/generated os.makedirs(OUTPUT_DIR, exist_okTrue) print(正在加載模型...) pipe QwenImagePipeline.from_pretrained( MODEL_PATH, torch_dtypetorch.float16, ) pipe.enable_model_cpu_offload() print(模型加載完成) app.get(/health) def health(): return {status: ok} app.post(/generate) def generate(req: GenerateRequest): try: image pipe( promptreq.prompt, negative_promptreq.negative_prompt, widthreq.width, heightreq.height, num_inference_stepsreq.num_inference_steps, guidance_scalereq.guidance_scale, ).images[0] filename f{uuid.uuid4().hex}.png save_path os.path.join(OUTPUT_DIR, filename) image.save(save_path) return {image_url: f/files/{filename}, filename: filename} except Exception as e: raise HTTPException(status_code500, detailstr(e))啟動FastAPI時(shí)使用Uvicorn來運(yùn)行pip install fastapi uvicorn python-multipart uvicorn main:app --host 0.0.0.0 --port 8000啟動后用curl驗(yàn)證一下curl -X POST http://127.0.0.1:8000/generate -H Content-Type: application/json -d {prompt:夕陽下的山間公路一輛車行駛其中航拍視角}如果返回了圖片文件的路徑說明整套鏈路是通的。4.3 對外開放的安全組與HTTPS配置接口默認(rèn)只能在服務(wù)器本機(jī)訪問要想從外部請求必須把服務(wù)器安全組的入方向規(guī)則打開允許訪問你指定的端口。不同云平臺對安全組的管理位置不一樣但邏輯都一樣在控制臺添加一條規(guī)則協(xié)議選擇TCP端口填寫8000來源地址按需選擇。如果你擔(dān)心接口被濫用我不建議直接暴露到公網(wǎng)。有幾種做法一是用網(wǎng)關(guān)或反向代理加上鑒權(quán)二是只開放到VPC內(nèi)部業(yè)務(wù)系統(tǒng)通過內(nèi)網(wǎng)調(diào)用三是在鑒權(quán)層加一個(gè)API KeyFastAPI里可以用依賴注入實(shí)現(xiàn)。生產(chǎn)環(huán)境至少要做到第三步否則任何人都能調(diào)用你的GPU來跑圖賬單會很難看。還要考慮HTTPS?,F(xiàn)代瀏覽器對HTTP接口的安全限制越來越嚴(yán)格如果要做成網(wǎng)頁應(yīng)用建議在反向代理層配置SSL證書。阿里云有免費(fèi)的SSL證書有效期為三個(gè)月到期后可以免費(fèi)續(xù)期。這個(gè)小細(xì)節(jié)對生產(chǎn)環(huán)境很重要我第一次上線時(shí)就是忽略了HTTPS結(jié)果前端要求加密環(huán)境接口全被攔了。5. 部署過程中的常見問題與排查實(shí)錄5.1 顯存不足與OOM報(bào)錯(cuò)最常遇到的錯(cuò)誤就是CUDA out of memory。它在日志里通常表現(xiàn)為torch.cuda.OutOfMemoryError提示無法分配足夠顯存。問題出現(xiàn)的原因一般是模型權(quán)重、中間激活值、以及生成的圖像張量三者疊加超過了顯卡顯存上限。解決辦法按優(yōu)先級排列首先確認(rèn)你是不是真的用了torch_dtypetorch.float16很多新手忘了這一行導(dǎo)致模型以fp32精度加載顯存翻倍。其次是啟用enable_model_cpu_offload()讓部分層在需要時(shí)再進(jìn)GPU。最后如果還不行把生成尺寸調(diào)小或者干脆換成更大顯存的實(shí)例。檢查顯存占用的命令是nvidia-smi看進(jìn)程那一欄的顯存使用量。5.2 模型下載中斷和校驗(yàn)失敗模型權(quán)重文件很大下載過程中偶發(fā)網(wǎng)絡(luò)波動導(dǎo)致文件不完整加載時(shí)會出現(xiàn)safetensors讀取異常。這個(gè)問題在ModelScope下載時(shí)比較少見但也不是沒有。排查方法是看日志里的報(bào)錯(cuò)文件名刪除對應(yīng)的殘留文件后重新下載。如果你用的是snapshot_download可以設(shè)置斷點(diǎn)續(xù)傳和完整性校驗(yàn)但最保險(xiǎn)的做法是下載完成后對比一下文件大小跟遠(yuǎn)端是否一致。另外提醒一點(diǎn)不要在模型還沒下載完時(shí)就啟動Python加載腳本否則系統(tǒng)會提示找不到某些索引文件。這種問題不是代碼寫錯(cuò)了是文件沒就位耐心等下載完成就好。5.3 依賴版本沖突一籮筐Diffusers版本更新很快不同版本對模型倉庫的兼容性有差異。我遇到過最典型的報(bào)錯(cuò)是UNet2DConditionModel does not support...或者KeyError: unet這類基本是權(quán)重目錄結(jié)構(gòu)和當(dāng)前Diffusers版本不匹配。解決辦法是檢查模型的model_index.json然后把它要求的minimum version對應(yīng)的庫安裝上。這里我分享一個(gè)實(shí)用習(xí)慣把關(guān)鍵的Python庫版本記錄在需求文件里方便之后復(fù)現(xiàn)。比如pip freeze requirements-lock.txt當(dāng)你調(diào)試好一套能穩(wěn)定運(yùn)行的組合后一定把這個(gè)文件存下來。下次重建環(huán)境直接pip install -r requirements-lock.txt省時(shí)省心。5.4 接口能出圖但外部訪問不到模型能跑通、接口也啟動成功但外部就是訪問不到排查順序一般是先看服務(wù)是否真的在監(jiān)聽用ss -ntlp查看端口然后看安全組規(guī)則是否放行再看防火墻ufw/firewalld是不是攔截了最后看云平臺的網(wǎng)絡(luò)ACL配置。很多時(shí)候不是安全組沒配置而是服務(wù)器自帶的防火墻忘記放行或者走了代理導(dǎo)致路徑不同。另外一個(gè)容易被忽略的點(diǎn)是Uvicorn啟動時(shí)--host 0.0.0.0是必須的。如果你只寫--host 127.0.0.1那無論安全組怎么放行外部都連不上。這是我第一次部署時(shí)踩的坑檢查半天都在安全組上其實(shí)問題出在監(jiān)聽地址。5.5 生成結(jié)果與預(yù)期不符的調(diào)試建議如果服務(wù)能跑通但出圖效果不滿意比如畫面和提示詞不匹配、色彩過曝、構(gòu)圖混亂需要從參數(shù)層面調(diào)整?;氐酵评砟_本里調(diào)guidance_scale、num_inference_steps、提示詞結(jié)構(gòu)。中文提示詞建議用自然語言描述畫面包含主題、環(huán)境、光線、風(fēng)格、鏡頭語言效果比單純堆砌關(guān)鍵詞好很多。負(fù)面提示詞寫得越具體越能避免常見問題。這個(gè)優(yōu)化過程本質(zhì)上是在做提示詞工程跟部署環(huán)境無關(guān)但它直接影響你部署出來的服務(wù)有沒有價(jià)值。建議花時(shí)間寫幾個(gè)高質(zhì)量的提示詞模板放到業(yè)務(wù)系統(tǒng)里復(fù)用。6. 性能調(diào)優(yōu)與成本控制6.1 加速推理的小技巧模型加載完成后的推理速度主要受GPU算力限制但也有一些軟件層優(yōu)化可以榨取性能。比如使用torch.compile對模型進(jìn)行圖編譯推理延遲通常能降低10%到20%。不過首次編譯需要額外時(shí)間適合長期運(yùn)行的服務(wù)。另外把模型從fp16提升到bf16精度在部分GPU上也有速度提升視覺損失可以忽略。如果業(yè)務(wù)上有大量批量出圖需求建議把單張圖片推理的批處理做起來。雖然Diffusers支持傳入多張圖片的列表來批量生成但顯存占用會成倍增長需要根據(jù)卡的實(shí)際顯存調(diào)整batch大小。我一般把batch控制在2到4每張圖耗時(shí)比單張略高但吞吐量明顯上去。6.2 降低云成本的實(shí)操經(jīng)驗(yàn)云GPU實(shí)例連續(xù)運(yùn)行24小時(shí)的費(fèi)用不低對個(gè)人開發(fā)者更是如此。我的做法是如果是非生產(chǎn)環(huán)境只在使用前啟動實(shí)例用完立即釋放或關(guān)機(jī)如果是生產(chǎn)環(huán)境評估一下業(yè)務(wù)的波峰波谷在波谷期通過定時(shí)任務(wù)關(guān)閉實(shí)例或切換到低規(guī)格機(jī)型。阿里云、騰訊云等平臺都有“定時(shí)開關(guān)機(jī)”或者“運(yùn)維編排”功能可以提前設(shè)定好。搶占式實(shí)例是另一個(gè)省錢手段。價(jià)格可能是按量付費(fèi)的兩折到三折但有一定概率被回收。適合跑一次性任務(wù)、測試調(diào)參不適合做核心生產(chǎn)。我自己的經(jīng)驗(yàn)是先用按量付費(fèi)實(shí)例把整個(gè)流程跑通確認(rèn)穩(wěn)定之后再決定要不要對生產(chǎn)環(huán)境做降本優(yōu)化。提示關(guān)閉實(shí)例不等于釋放磁盤數(shù)據(jù)都還在。如果是按量付費(fèi)且磁盤隨實(shí)例釋放的配置關(guān)機(jī)期間仍然會算磁盤費(fèi)用不過通常很便宜。最省錢的辦法是無任務(wù)時(shí)把磁盤快照保存后直接釋放實(shí)例下次再重建。6.3 周邊系統(tǒng)集成時(shí)的注意點(diǎn)部署完推理服務(wù)后常見的周邊集成包括將生成圖片上傳到對象存儲OSS、用寶塔面板做網(wǎng)站管理、配置SSL證書等。如果你通過寶塔面板管理服務(wù)器注意在配置阿里云OSS的時(shí)候AccessKey ID和Secret需要平臺授權(quán)寶塔面板里填錯(cuò)或權(quán)限不足都會導(dǎo)致上傳失敗。這個(gè)和模型部署本身關(guān)系不大但繞不開我在幫朋友集成時(shí)還被卡過一下午。另一個(gè)集成點(diǎn)是對象存儲的簽名URL問題。如果你不希望生成圖片被公開訪問可以在生成后直接通過SDK調(diào)用OSS私有桶上傳并生成臨時(shí)訪問鏈接。這個(gè)方案比直接暴露服務(wù)器磁盤路徑更安全也更適合用在生產(chǎn)環(huán)境??傮w來說模型部署是第一步周邊系統(tǒng)的集成才是真正讓它變成產(chǎn)品的一部分。7. 寫在最后的一些經(jīng)驗(yàn)部署Qwen-Image-2.1這件事難度真不在模型本身而在環(huán)境依賴和服務(wù)器配置的組合。只要先把環(huán)境搞順后面的路徑基本暢通。我自己前后部署了三遍才總結(jié)出最穩(wěn)的順序就是官方文檔最小驗(yàn)證逐步擴(kuò)展別一上來就鋪開一堆分布式優(yōu)化。再分享一個(gè)小技巧每次調(diào)整完環(huán)境或腳本都順手做一次記錄哪怕只是幾行注釋或者截圖。云服務(wù)器容易被釋放代碼也容易改亂但筆記不會丟。這套習(xí)慣幫我節(jié)省了大量重復(fù)排錯(cuò)的時(shí)間對個(gè)人開發(fā)者尤其重要。動手之前先確認(rèn)預(yù)算和時(shí)間安排。首次部署沒有經(jīng)驗(yàn)的話預(yù)留一個(gè)下午來摸爬滾打是很有必要的。等到流程熟了從零到一部署一套可用服務(wù)壓縮到一小時(shí)內(nèi)不是什么難事。