AI PC 新玩法:OpenVINO? GenAI+LoRA 助你輕松實(shí)現(xiàn)個(gè)性化圖像的高效生成
借助生成式 AI 模型(如 Stable Diffusion 和 FLUX.1),用戶可以將平平無奇的文本提示詞轉(zhuǎn)換為令人驚艷的視覺效果。但如果你想生成更具風(fēng)格化或定制化的圖像,開源的基礎(chǔ)模型可能無法滿足你的所有需求。這時(shí),LoRA(低秩自適應(yīng))就派上用場(chǎng)了。許多風(fēng)格修改和增強(qiáng)功能現(xiàn)以 LoRA 的形式發(fā)布,作為基礎(chǔ)模型的模塊化附加組件。通過添加LoRA適配器,使得大家可以隨心所欲、生成風(fēng)格多變的個(gè)性化圖像。
本文引用地址:http://2s4d.com/article/202503/467904.htm通過將 LoRA 集成到 OpenVINO? GenAI 中,開發(fā)者可以一次加載多個(gè) LoRA 適配器,并在運(yùn)行推理時(shí)快速動(dòng)態(tài)切換,無需重新編譯基礎(chǔ)模型。這使得用戶能夠以高效、可擴(kuò)展的方式生成滿足特定需求的、多樣化、高質(zhì)量的輸出?,F(xiàn)在,讓我們深入了解具體步驟,借助 OpenVINO? 將你的圖像生成項(xiàng)目推向全新高度!
目錄
1.克隆openvino.genai GitHub倉庫
2.為AI模型轉(zhuǎn)換安裝相關(guān)依賴包
3.下載和轉(zhuǎn)換AI模型及相應(yīng)的分詞器
4.選擇單個(gè)或者多個(gè)LoRA 適配器來進(jìn)行圖像生成
5.用C++創(chuàng)建和運(yùn)行LoRA圖像生成示例
6.結(jié)論
第0步:
問 OpenVINO? GenAI 示例代碼,體驗(yàn) LoRA 適配器加持的文本生成圖像功能
了解如何使用 OpenVINO? GenAI 搭配 LoRA 進(jìn)行文本生成圖像的最簡(jiǎn)單方法,就是查看代碼倉庫中的示例源碼。
以下是使用 LoRA 進(jìn)行圖像生成的 Python 示例腳本:
def main(): parser = argparse.ArgumentParser() parser.add_argument('models_path') parser.add_argument('prompt') args, adapters = parser.parse_known_args() prompt = args.prompt device = "CPU" # GPU, NPU can be used as well adapter_config = openvino_genai.AdapterConfig() # Multiple LoRA adapters applied simultaneously are supported, parse them all and corresponding alphas from cmd parameters: for i in range(int(len(adapters) / 2)): adapter = openvino_genai.Adapter(adapters[2 * i]) alpha = float(adapters[2 * i + 1]) adapter_config.add(adapter, alpha) # LoRA adapters passed to the constructor will be activated by default in next generates pipe = openvino_genai.Text2ImagePipeline(args.models_path, device, adapters=adapter_config) print("Generating image with LoRA adapters applied, resulting image will be in lora.bmp") image = pipe.generate(prompt, generator=Generator(42), width=512, height=896, num_inference_steps=20) image_write("lora.bmp", image)
你會(huì)發(fā)現(xiàn),只需少量代碼,就能將 LoRA 適配器(單個(gè)或多個(gè))輕松融入 OpenVINO? GenAI 的文本生成圖像流程。運(yùn)行 LoRA 圖像生成腳本,就像這樣簡(jiǎn)單:
python lora_text2image.py FLUX.1-dev/INT4 " albert einstein, yarn art style" pytorch_lora_weights.safetensors 1.0
其中pytorch_lora_weights.safetensors 就是我們選擇的用于圖像生成的LoRA 適配器。
Step 1: 克隆openvino.genai GitHub倉庫
從openvino.genai GitHub倉庫克隆OpenVINO? GenAI的開源代碼。
Step 2:為AI模型轉(zhuǎn)換安裝相關(guān)依賴包
前往 文本生成圖像(Text-to-Image)LoRA 示例:
<your_path>openvino.genaisamplespythonimage_generation
在這個(gè)文件夾中,你可以找到關(guān)于示例的相關(guān)README.md 文件. 你也可以直接從 OpenVINO? 下載頁面訪問該 README 文件。
現(xiàn)在,你需要準(zhǔn)備一個(gè) Python 虛擬環(huán)境,用于模型下載和轉(zhuǎn)換。可以使用以下代碼完成設(shè)置:
python -m venv venv_export venv_exportScriptsactivate pip install --upgrade-strategy eager -r ../../export-requirements.txt
Step 3:下載和轉(zhuǎn)換AI模型及相應(yīng)的分詞器
為了生成圖像,我們將使用 FLUX.1-dev模型,并且可以通過一條命令下載并轉(zhuǎn)換為 OpenVINO? IR 格式:
optimum-cli export openvino --model black-forest-labs/FLUX.1-dev --weight-format int4 --group-size 64 --ratio 1.0 FLUX.1-dev/INT4
如果由小伙伴不方便從HuggingFace的網(wǎng)站直接下載模型的,也可以先利用以下命令,從魔搭社區(qū)下載模型
modelscope download --model black-forest-labs/FLUX.1-dev
將模型保存在本地后,再次運(yùn)行以下命令,
optimum-cli export openvino --model/FLUX.1-dev –task text-to-image --weight-format int4 --group-size 64 --ratio 1.0 FLUX.1-dev/INT4
完成模型的轉(zhuǎn)換和導(dǎo)出。此外,OpenVINO? 還支持其他適用于 LoRA 適配器的文本生成圖像模型,完整列表請(qǐng)見此處。歡迎嘗試不同模型,探索更多可能性!
過一會(huì)兒,轉(zhuǎn)換完成后的模型就保留在了本地磁盤上,并準(zhǔn)備好進(jìn)行圖像生成。如果不再需要轉(zhuǎn)換(或優(yōu)化)AI 模型,你可以刪除 venv_export 文件夾,這些依賴包在 AI 推理的過程中并不需要。或者,你也可以直接從我們?cè)贖uggingFace這里或者魔搭社區(qū)這里的模型專區(qū)下載我們工程師已轉(zhuǎn)換和量化的 FLUX.1 模型,跳過上述 第 2 步和第 3 步 的模型下載和轉(zhuǎn)換步驟,直接從下方的推理步驟開始使用模型!
■ HuggingFace
https://huggingface.co/OpenVINO/FLUX.1-schnell-int4-ov
■ 魔搭社區(qū)
https://modelscope.cn/models/OpenVINO/FLUX.1-schnell-int4-ov
Step 4: 選擇單個(gè)或者多個(gè)LoRA 適配器來進(jìn)行圖像生成
首先,我建議你準(zhǔn)備一個(gè) Python 虛擬環(huán)境來運(yùn)行 AI 推理。與用于模型下載和轉(zhuǎn)換的環(huán)境不同,這里你只需要安裝一個(gè) Python 包 —— openvino.genai。
python -m venv venv venvScriptsactivate pip install -r ../../deployment-requirements.txt
openvino_genai.AdapterConfig 用于在 openvino_genai.Text2ImagePipeline 中管理 LoRA 適配器。它可以用于添加、移除適配器,或調(diào)整它們的權(quán)重系數(shù)(Alpha)來實(shí)現(xiàn)風(fēng)格融合。你可以在配置中加入一個(gè)或多個(gè)適配器,并通過 Alpha 系數(shù)進(jìn)行混合,以生成更具風(fēng)格化和創(chuàng)意的圖像。目前,OpenVINO? GenAI 支持以 Safetensors 格式保存的 LoRA 適配器。你可以使用 CivitAI 或 HuggingFace Hub 上的公開預(yù)訓(xùn)練適配器,或者自行訓(xùn)練適配器來滿足個(gè)性化需求。
■ CivitAI
https://civitai.com/
■ HuggingFace Hub
https://huggingface.co/models
以下是用于處理多個(gè) LoRA 適配器的代碼示例,
adapter_config = openvino_genai.AdapterConfig() # Multiple LoRA adapters applied simultaneously are supported, parse them all and corresponding alphas from cmd parameters: for i in range(int(len(adapters) / 2)): adapter = openvino_genai.Adapter(adapters[2 * i]) alpha = float(adapters[2 * i + 1]) adapter_config.add(adapter, alpha)
將 LoRA 集成到 OpenVINO? GenAI 的文本生成圖像流程中,僅需一行代碼,如下所示:
# LoRA adapters passed to the constructor will be activated by default in next generates pipe = openvino_genai.Text2ImagePipeline(args.models_path, device, adapters=adapter_config)
選擇單個(gè)LoRA適配器進(jìn)行圖像生成
python lora_text2image.py .FLUX.1-devINT4 "albert einstein" pytorch_lora_weights.safetensors 1.0
使用上述命令,你可以生成帶有 “Yarn art” LoRA 風(fēng)格的圖像,并使用 INT4 量化的 FLUX.1-dev 模型,效果如下:
選擇多個(gè)LoRA 適配器進(jìn)行圖像生成
當(dāng)然,你還可以在一次推理中輕松使用多個(gè) LoRA 適配器運(yùn)行 Text2ImagePipeline。例如,使用以下命令,可以將 “浮世繪藝術(shù)(Ukiyo-e Art)” 風(fēng)格與 “點(diǎn)繪風(fēng)格(Point style)” 結(jié)合,并搭配轉(zhuǎn)化和導(dǎo)出為OpenVINO? 格式的SDXL-LCM模型(具體步驟參考這里)來生成圖像:
python lora.py "./sdxl-lcm" "a cute cat in sunglasses" araminta_k_the_point.safetensors 0.8 "Ukiyo-e Art.safetensors" 0.6
生成的融合了多個(gè)LoRA風(fēng)格的圖像就如下圖所示
OpenVINO? GenAI 支持以 Safetensors 格式保存的 LoRA 適配器。你可以使用 CivitAI 或 HuggingFace Hub上的公開預(yù)訓(xùn)練適配器,或者自行訓(xùn)練 LoRA 適配器,以滿足個(gè)性化需求。
請(qǐng)注意,在加載預(yù)訓(xùn)練的 LoRA 適配器之前,請(qǐng)確保它們與基礎(chǔ)模型架構(gòu)兼容。例如,如果你使用 SDXL 模型,則需要提供專為該模型類型訓(xùn)練的 LoRA 適配器。否則,例如使用 FLUX 訓(xùn)練的適配器,將無法正確集成到推理流水線中,也無法成功運(yùn)行模型推理。
Step 5: 用C++創(chuàng)建和運(yùn)行LoRA圖像生成示例
盡管 Python 作為編程語言功能強(qiáng)大,且非常適合代碼實(shí)驗(yàn),但在許多情況下,C++ 更適用于桌面應(yīng)用程序的開發(fā)。下面是用于 LoRA 圖像生成 的 C++ 代碼示例:
const std::string device = "CPU"; // GPU, NPU can be used as well ov::genai::AdapterConfig adapter_config; // Multiple LoRA adapters applied simultaneously are supported, parse them all and corresponding alphas from cmd parameters: for(size_t i = 0; i < (argc - 3)/2; ++i) { ov::genai::Adapter adapter(argv[3 + 2*i]); float alpha = std::atof(argv[3 + 2*i + 1]); adapter_config.add(adapter, alpha); } // LoRA adapters passed to the constructor will be activated by default in next generates ov::genai::Text2ImagePipeline pipe(models_path, device, ov::genai::adapters(adapter_config)); std::cout << "Generating image with LoRA adapters applied, resulting image will be in lora.bmpn"; ov::Tensor image = pipe.generate(prompt, ov::genai::generator(std::make_shared<ov::genai::CppStdGenerator>(42)), ov::genai::width(512), ov::genai::height(896), ov::genai::num_inference_steps(20)); imwrite("lora.bmp", image, true);
關(guān)于使用 C++ 構(gòu)建 LoRA 文本生成圖像 應(yīng)用的詳細(xì)指南,請(qǐng)查看此處。
小結(jié)
我們演示了如何使用 OpenVINO? GenAI 通過文本提示詞結(jié)合多個(gè) LoRA 適配器 進(jìn)行圖像生成。借助提供的工具和代碼,無論你偏好哪種編程語言,都能輕松上手。
你還可以通過 OpenVINO? Notebook (https://github.com/openvinotoolkit/openvino_notebooks/tree/latest/notebooks/multilora-image-generation)體驗(yàn) OpenVINO? GenAI 的多 LoRA 適配器圖像生成,運(yùn)行效果如下:
歡迎嘗試修改示例代碼,并調(diào)整以下生成參數(shù),探索更多可能性:
◆ 更改生成圖像的寬度或高度
◆ 為同一提示詞生成多張圖片
◆ 調(diào)整推理步數(shù),以優(yōu)化生成質(zhì)量和速度
◆ 調(diào)節(jié)引導(dǎo)尺度(Guidance Scale),影響生成結(jié)果的遵從度(了解更多詳情)
◆ (適用于 SD 1.x 和 2.x)當(dāng)引導(dǎo)尺度 >1 時(shí),添加 負(fù)向提示詞 以優(yōu)化生成效果
◆ 結(jié)合多個(gè) LoRA 適配器,并調(diào)整混合系數(shù),實(shí)現(xiàn)個(gè)性化風(fēng)格融合
使用 OpenVINO? GenAI,這一切都變得簡(jiǎn)單高效!快來試試吧!
Notices & Disclaimers
Performance varies by use, configuration, and other factors. Learn more on the Performance Index site.
Performance results are based on testing as of dates shown in configurations and may not reflect all publicly available updates. See backup for configuration details. No product or component can be absolutely secure. Your costs and results may vary. Intel technologies may require enabled hardware, software or service activation.
? Intel Corporation. Intel, the Intel logo, and other Intel marks are trademarks of Intel Corporation or its subsidiaries.
評(píng)論