- 首页
- 部署指南
- Qwen Image 编码器
Text Encoder 分离部署/优化指南 (Advanced Guide)¶
配置示例为字段片段,请合并到所选 Qwen 模型的完整配置中,不要直接替换整个 JSON 文件。
对于大规模模型推理,Text Encoder 往往占据显存且计算相对独立。LightX2V 提供了两种先进的 Text Encoder 优化方案:Service Mode (分离部署) 和 Kernel Mode (内核优化)。
这两种方案目前针对 Qwen-Image 系列模型的 Text Encoder 进行过深度优化,显著降低了显存占用并提升了推理吞吐量。
方案对比¶
| 特性 | Baseline (原始 huggingface) | Service Mode (分离部署) | Kernel Mode (内核优化) |
|---|---|---|---|
| 部署架构 | 与主模型在同一进程 | 独立服务,通过 HTTP/SHM 通信 | 与主模型在同一进程 |
| 显存占用 | 高 (加载完整 HF 模型) | 极低 (Client 端不加载权重) | 中 (加载精简模型 + Kernel) |
| 跨请求复用 | 无 | 支持 (多客户端共享一个 Encoder) | 无 |
| 通信开销 | 无 | 有 (HTTP/SharedMemory) | 无 |
| 推理速度 | 慢 (标准 Layer) | 极快 (LightLLM 后端加速) | 快 (集成 LightLLM Kernel) |
| 适用场景 | 快速验证、小显存单卡 | 多卡/多机生产环境、DiT 显存瓶颈 | 高性能单机推理、追求极限速度 |
详情性能数据可参考: Performance Benchmark
1. Service Mode (分离部署模式)¶
Service Mode 将 Text Encoder 作为一个独立的服务启动,基于高性能 LLM 推理框架 LightLLM。主模型 (LightX2V Client) 通过 API 请求获取 hidden states。
1.1 环境准备¶
Text Encoder 服务端需要使用 LightLLM 框架。
服务端安装步骤:
-
拉取 LightLLM 代码 (指定
return_hiddens分支) -
配置环境 请参考 LightLLM 官方文档配置 Python 环境 (通常需要 PyTorch, CUDA, Triton 等)。 注意:确保服务端环境支持 FlashAttention 以获得最佳性能。
1.2 启动 Text Encoder 服务¶
使用 lightllm.server.api_server 启动服务。
编写启动脚本 start_encoder_service.sh (参考示例):
#!/bin/bash
# 显卡设置 (例如使用独立的卡运行 Text Encoder)
export CUDA_VISIBLE_DEVICES=1
export LOADWORKER=18
# 指向 LightLLM 代码目录
# export PYTHONPATH=/path/to/LightLLM:$PYTHONPATH
# 模型相关路径 (需替换为实际路径)
MODEL_DIR="/path/to/models/Qwen-Image-Edit-2511/text_encoder"
TOKENIZER_DIR="/path/to/models/Qwen-Image-Edit-2511/tokenizer"
PROCESSOR_DIR="/path/to/models/Qwen-Image-Edit-2511/processor"
# 设置环境变量供 LightLLM 内部使用
export LIGHTLLM_TOKENIZER_DIR=$TOKENIZER_DIR
export LIGHTLLM_PROCESSOR_DIR=$PROCESSOR_DIR
export LIGHTLLM_TRITON_AUTOTUNE_LEVEL=1
python -m lightllm.server.api_server \
--model_dir $MODEL_DIR \
--host 0.0.0.0 \
--port 8010 \
--tp 1 \
--enable_fa3 \
--return_input_hidden_states \
--enable_multimodal \
--disable_dynamic_prompt_cache
关键参数说明:
--return_input_hidden_states: 必须开启。让 LightLLM 返回 hidden states 而不是生成的 token,这是 Service Mode 的核心。--enable_multimodal: 开启多模态支持 (处理 Qwen 的 Vision Token)。--port 8010: 服务监听端口,需与 Client 端配置一致。--tp 1: Tensor Parallel 度,通常 Text Encoder 单卡即可部署。--enable_fa3: 启用 FlashAttention。--disable_dynamic_prompt_cache: 禁用动态 Prompt Cache。
启动服务:
看到类似 "Uvicorn running on http://0.0.0.0:8010" 即表示启动成功。1.3 配置 LightX2V Client¶
在 LightX2V 端,只需修改 config_json 来启用 Service Mode。
配置文件 (configs/qwen_image/qwen_image_i2i_2511_service.json):
{
"text_encoder_type": "lightllm_service",
"lightllm_config": {
"service_url": "http://localhost:8010",
"service_timeout": 30,
"service_retry": 3,
"use_shm": true
}
}
参数说明:
text_encoder_type: 设置为 "lightllm_service"。service_url: Text Encoder 服务的地址。use_shm: 强烈推荐开启。true: 启用共享内存 (Shared Memory) 通信。如果 Client 和 Server 在同一台机器 (即使不同 Docker 容器,需挂载共享内存),数据传输将通过内存直读,零拷贝,速度极快。false: 使用 HTTP 传输 base64 编码数据。适用于跨机部署。
运行推理:
编写运行脚本 (scripts/qwen_image/inference/text_encoder/qwen_image_i2i_2511_service.sh):
python -m lightx2v.infer \
--model_cls qwen_image \
--task i2i \
--model_path /path/to/Qwen-Image-Edit-2511 \
--config_json configs/qwen_image/qwen_image_i2i_2511_service.json \
--prompt "Make the girl from Image 1 wear the black dress from Image 2..." \
--image_path "1.png,2.png,3.png" \
--save_result_path output.png
2. Kernel Mode (内核优化模式)¶
Kernel Mode 适合单机高性能推理场景。它不在后台启动独立服务,而是在进程内直接加载 Text Encoder,但替换了 HuggingFace 原始的慢速算子,集成了 LightLLM 的核心 Triton Kernel。
2.1 优势¶
- 无需独立服务: 简化部署运维。
- Triton 加速: 使用高度优化的 FlashAttention 和 Fused RMSNorm Triton Kernel。
- 无通信开销: 纯进程内内存操作。
2.2 配置方法¶
只需修改 config_json 启用 Kernel Mode。
配置文件 (configs/qwen_image/qwen_image_i2i_2511_kernel.json):
{
"text_encoder_type": "lightllm_kernel",
"lightllm_config": {
"use_flash_attention_kernel": true,
"use_rmsnorm_kernel": true
}
}
参数说明:
text_encoder_type: 设置为 "lightllm_kernel"。use_flash_attention_kernel: 启用 FlashAttention 加速 Attention 层。 默认情况下将使用 flash_attention_2,但你也可以使用 “use_flash_attention_kernel”: “flash_attention_3”。use_rmsnorm_kernel: 启用 Fused RMSNorm Kernel (需安装sgl_kernel或相关依赖,如未安装会自动降级)。
运行推理:
编写运行脚本 (scripts/qwen_image/inference/text_encoder/qwen_image_i2i_2511_kernel.sh):
python -m lightx2v.infer \
--model_cls qwen_image \
--task i2i \
--model_path /path/to/Qwen-Image-Edit-2511 \
--config_json configs/qwen_image/qwen_image_i2i_2511_kernel.json \
--prompt "..." \
--image_path "..." \
--save_result_path output.png
总结建议¶
- 开发调试: 默认模式 (HuggingFace) 兼容性最好。
- 单机高性能: 使用 Kernel Mode。
- 多机/多卡/显存受限: 使用 Service Mode。将 Text Encoder 部署在显存较小的卡上,主卡专注于 DiT 推理,并通过 Shared Memory 实现高效通信。