使用 Hugging Face Diffusers 在 Intel Sapphire Rapids CPU 上微調 Stable Diffusion
Hugging Face 展示了如何僅使用五張範例圖像,透過文字反演在 Intel Sapphire Rapids CPU 上微調 Stable Diffusion 模型,示範了透過 Intel Extension for PyTorch 和 oneCCL 進行 CPU 基礎微調。
叢集設置
四台 Intel Xeon Platinum 8480+ 伺服器,每台配備兩顆 Sapphire Rapids CPU,提供 224 個邏輯核心(每個插槽 56 個實體核心和 112 個執行緒)用於分散式微調。lscpu 輸出確認了架構、核心數量、執行緒數量以及 AMX 指令集的存在。伺服器透過 IP 位址 192.168.20.2、192.168.21.2、192.168.22.2 和 192.168.23.2 存取,並在 nodefile 中列出以供 MPI 使用。
軟體環境與依賴
環境使用 Python 3.9、PyTorch CPU 建置、Transformers、Accelerate 版本 0.19.0、PyTorch 的 oneCCL 綁定、Intel Extension for PyTorch (IPEX) 以及用於 tcmalloc 的 gperftools。建立名為 diffuser 的 conda 環境後,依賴項透過 pip 和 conda 安裝。Diffusers 儲存庫從 GitHub 克隆,並在每個節點上從源碼安裝。
準備資料與模型程式碼
五張範例圖像從 sd-concepts-library/dicoo 資料集下載,並放置在每個節點的 /home/devcloud/dicoo。文字反演腳本 (examples/textual_inversion/textual_inversion.py) 被編輯以匯入 intel_extension_for_pytorch,並對 U‑Net 和 VAE 模型同時應用 ipex.optimize,使用訓練資料型別 (bf16)。此修改必須在啟動作業之前套用於所有節點。
配置分散式作業
環境變數在主要節點上設置並傳播給工作節點:I_MPI_HYDRA_IFACE 選擇網路介面,oneccl_bindings_for_pytorch_path 定位 oneCCL 綁定,LD_PRELOAD 包含 OpenMP 和 tcmalloc 庫,CCL_ATL_TRANSPORT 設為 ofi,且 CCL_WORKER_COUNT 設為 1。模型名稱定義為 runwayml/stable-diffusion-v1-5,資料目錄為 /home/devcloud/dicoo。
執行微調
微調作業透過 mpirun -f nodefile -n 16 -ppn 4 啟動,這會啟動 16 個 MPI 排名(每節點四個)。accelerate launch 命令使用以下參數執行修改後的文字反演腳本:`--pretrained_model_name_or_path=$MODEL_NAME --train_data_dir=$DATA_DIR --learnable_property=