本地部署Qwen2.5-Omni 模型的详细步骤和命令清单:

先决条件:

  • 一个配备 NVIDIA GPU 的系统(视频中使用的是 RTX A6000 48GB VRAM,但 22GB+ 显存应该也可以工作)。
  • 系统已安装 NVIDIA 驱动和 CUDA(视频中使用的是 12.1 版本)。
  • 已安装 Conda(或 Miniconda/Anaconda)。

安装步骤和命令:

  1. 创建并激活 Conda 环境:
    • 创建一个名为 qwen_omni 的新 Conda 环境(使用 Python 3.10)并激活它。
    conda create -n qwen_omni python=3.10 -y
    conda activate qwen_omni
    

    (注意:视频中使用了 && conda activate qwen_omni 将两个命令在一行内执行,但分开写更清晰。)

  2. 安装 PyTorch 和基础依赖:

    • 安装 PyTorch、TorchVision 和 TorchAudio,使用 CUDA 12.1 的索引。
    pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
    
    • 安装其他必要的 Python 库。
    pip install sentencepiece bitsandbytes protobuf numpy einops timm pillow
    
  3. 安装 CUDA Toolkit (如果安装过cuda驱动可以忽略在 Conda 环境内):
    • 从 Nvidia Conda 渠道安装特定操作所需的 CUDA Toolkit。
    conda install -c "nvidia/label/cuda-12.1.0" cuda-toolkit -y
    
    • (可选)检查 nvcc 版本(如视频所示):
    nvcc --version
    
  4. 从 GitHub 安装特定版本的 Transformers:
    • 为了保险起见,卸载任何现有的 Transformers 安装。
    pip uninstall -y transformers
    
    • 直接从 GitHub commit/Pull Request 安装 Qwen-Omni 需要的特定 Transformers 版本。
    pip install git+https://github.com/huggingface/transformers@f742a644ca32e65758c3adb36225aef1731bd2a8
    
    • 安装额外的依赖项(有些可能已安装)。
    pip install accelerate sentencepiece soundfile
    
  5. 安装 Flash Attention 和 Qwen Omni Utils:
    • 安装/更新 Flash Attention(为较新 GPU 优化)。使用 --no-build-isolation 标志避免潜在的构建问题。
    pip install -U flash-attn --no-build-isolation
    
    • 安装 Qwen 特定的工具包,包括用于读取视频的 decord 额外依赖。
    pip install "qwen-omni-utils[decord]"
    
  6. 准备 Python 脚本(可选):
    • 这些命令会创建用于存放代码的目录和空的 Python 文件。
    cd ~ # 或者进入你喜欢的工作目录
    mkdir mycode
    cd mycode
    mkdir qomni
    cd qomni
    touch app.py
    # 在你的编辑器中打开 app.py (例如,如果安装了 VS Code,则使用 'code .')
    # 将下面的 Python 代码粘贴进去
    
import soundfile as sf

from transformers import Qwen2_5OmniModel, Qwen2_5OmniProcessor
from qwen_omni_utils import process_mm_info

# default: Load the model on the available device(s)
model = Qwen2_5OmniModel.from_pretrained("Qwen/Qwen2.5-Omni-7B", torch_dtype="auto", device_map="auto")

# We recommend enabling flash_attention_2 for better acceleration and memory saving.
# model = Qwen2_5OmniModel.from_pretrained(
#     "Qwen/Qwen2.5-Omni-7B",
#     torch_dtype="auto",
#     device_map="auto",
#     attn_implementation="flash_attention_2",
# )

processor = Qwen2_5OmniProcessor.from_pretrained("Qwen/Qwen2.5-Omni-7B")

conversation = [
    {
        "role": "system",
        "content": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech.",
    },
    {
        "role": "user",
        "content": [
            {"type": "video", "video": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/draw.mp4"},
        ],
    },
]

# set use audio in video
USE_AUDIO_IN_VIDEO = True

# Preparation for inference
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversation, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = processor(text=text, audios=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = inputs.to(model.device).to(model.dtype)

# Inference: Generation of the output text and audio
text_ids, audio = model.generate(**inputs, use_audio_in_video=USE_AUDIO_IN_VIDEO)

text = processor.batch_decode(text_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(text)
sf.write(
    "output.wav",
    audio.reshape(-1).detach().cpu().numpy(),
    samplerate=24000,
)
  1. 运行推理脚本(模型下载):
    • 运行 Python 脚本。首次运行时,会下载模型权重(根据网络速度,这可能需要一些时间)。
      python3 app.py
      

完成这些步骤后,环境应该已经设置好,模型可以用于文本、音频、图像或视频输入的推理,正如提供的 Python 代码 (app.py) 中所示。