基于 OpenVINO GenAI 运行Qwen3-14B模型推理

OpenVINO GenAI 是英特尔推出的生成式 AI 开发工具库,基于 OpenVINO Runtime 构建,专为在英特尔 CPU、GPU、NPU 等硬件上高效部署生成式模型而设计。它通过简化开发流程、优化推理性能,帮助开发者快速实现文本生成、图像创作、语音交互等多模态应用。

安装依赖

安装使用 OpenVINO GenAI 所需的软件包。

pip install openvino-genai

下载模型

Qwen3-14B-INT4-OV模型下载地址:

https://www.modelscope.cn/models/OpenVINO/Qwen3-14B-int4-ov

模型量化参数:

权重压缩使用 nncf.compress_weights 进行,参数如下:

  • mode: INT4_ASYM

  • ratio: 0.8

  • group_size: 128

兼容性:
  • OpenVINO 版本 2025.1.0 及以上

模型推理

查看GPU支持的优化能力:

import openvino.runtime as ov
core = ov.Core()
# 查询 GPU 支持的优化能力 (精度)
capabilities = core.get_property("GPU", "OPTIMIZATION_CAPABILITIES")
print(f"Intel Xe GPU 支持的精度能力: {capabilities}")

查看可用的推理设备:

import openvino.runtime as ov
core = ov.Core()
print(core.available_devices)

# 打印设备的详细信息
for device in core.available_devices:
    if "GPU" in device.upper():
        print(f"GPU 设备 ID: {device}")
        print(f"GPU 设备名称: {core.get_property(device, 'FULL_DEVICE_NAME')}")

运行模型推理:

import openvino_genai as ov_genai
model_path = "D:/models/Qwen3-14B-int4-ov"
device = "CPU"
pipe = ov_genai.LLMPipeline(model_path, device)
pipe.get_tokenizer().set_chat_template(pipe.get_tokenizer().chat_template)
print(pipe.generate("What is OpenVINO?", max_length=200))

计算首token生成时间(TTFT)和推理速度:

import openvino_genai as ov_genai
import time

from prompt_config import make_prompt
prompt = make_prompt()

model_path = "D:/models/Qwen3-14B-int4-ov"
device = "GPU"

pipe = ov_genai.LLMPipeline(model_path, device)
tok = pipe.get_tokenizer()
tok.set_chat_template(tok.chat_template)

# 计算输入token数
def count_input_tokens(prompt_obj):
    try:
        enc_in = tok.encode(prompt_obj, add_special_tokens=True)
        ids_in = getattr(enc_in, "input_ids", None)
        if ids_in is not None:
            arr = ids_in.data
            return int(arr.shape[-1]) if arr.ndim > 1 else int(arr.shape[0])
    except Exception:
        pass

    return max(1, len(str(prompt_obj).split()))

# (可选)预热:避免首次编译/加载干扰 TTFT
pipe.generate("warmup", max_new_tokens=1)

# 先统计输入token长度
input_tokens = count_input_tokens(prompt)

# 流式统计TTFT
first_token_ms = [None]  # 闭包里保存首 token 到达时间(毫秒)
t0 = time.perf_counter()

def on_text(chunk: str):
    if first_token_ms[0] is None and chunk:
        first_token_ms[0] = (time.perf_counter() - t0) * 1000.0
    print(chunk, end="", flush=True)
    return False  # 继续流式生成

streamer = ov_genai.TextStreamer(tok, on_text)

print("\n=== Streaming output ===")
t0 = time.perf_counter()
text_out = pipe.generate(prompt, max_new_tokens=1024, streamer=streamer)
t1 = time.perf_counter()
print("\n=== End of streaming ===\n")

# ========= 统计生成 token 数(输出)=========
gen_tokens = None
enc = tok.encode(text_out, add_special_tokens=False)  # 仅统计新生成文本,不含特殊符号
ids = getattr(enc, "input_ids", None)  # ov.Tensor
if ids is not None:
    arr = ids.data  # numpy array
    gen_tokens = int(arr.shape[-1]) if arr.ndim > 1 else int(arr.shape[0])

# ========= 计算与打印指标 =========
total_elapsed_s = t1 - t0
ttft_ms = first_token_ms[0] if first_token_ms[0] is not None else float("nan")
# 从首 token 之后的吞吐(更贴近推理阶段性能)
after_first_s = total_elapsed_s - (0 if ttft_ms != ttft_ms else ttft_ms / 1000.0)
after_first_s = max(1e-9, after_first_s)

tps_overall = gen_tokens / max(1e-9, total_elapsed_s)
tps_after_first = gen_tokens / after_first_s
total_tokens = input_tokens + gen_tokens

print("=== Tokens ===")
print(f"Prompt tokens (input): {input_tokens}")
print(f"New tokens (output): {gen_tokens}")
print(f"Total tokens (prompt + output): {total_tokens}")

print("\n=== Perf (manual) ===")
print(f"TTFT: {ttft_ms:.2f} ms" if ttft_ms == ttft_ms else "TTFT: N/A")
print(f"Throughput (overall): {tps_overall:.2f} tokens/s")
print(f"Throughput (after first token): {tps_after_first:.2f} tokens/s")
print(f"Generated tokens: {gen_tokens}")
print(f"Total elapsed: {total_elapsed_s*1000:.2f} ms")

### OpenVINOGenAI Flux的集成概述 OpenVINO 是英特尔推出的一款用于加速深度学习推理性能的工具包,支持多种框架训练的模型优化和部署[^1]。而 GenAI Flux 则是一个专注于生成式人工智能(Generative AI)工作流管理和服务编排的平台,旨在简化大规模生成式 AI 的开发、测试以及生产化过程[^2]。 两者的结合可以显著提升生成式 AI 模型推理效率并降低资源消耗。以下是关于如何利用 OpenVINOGenAI Flux 进行推断或模型优化的具体方法: --- #### 一、模型转换与优化 为了使预训练好的生成式 AI 模型能够在 OpenVINO 上高效运行,需先将其转化为 Intermediate Representation (IR) 格式的文件。此格式由 `.xml` 文件描述网络结构,`.bin` 文件存储权重参数组成[^3]。 ```bash # 使用 Model Optimizer 将 PyTorch 或 TensorFlow 模型转为 IR 格式 mo --input_model=path/to/your/model.pth \ --model_name=genai_flux_model \ --framework=torch # 如果是 TensorFlow,则改为 tensorflow ``` 上述命令通过指定输入路径完成模型到 IR 的转化操作,并设置目标名称以便后续加载调用[^4]。 --- #### 二、在 GenAI Flux 中配置 OpenVINO 推理引擎 一旦获得了兼容 OpenVINO 的 IR 模型之后,在 GenAI Flux 平台上定义服务时可引入该优化后的版本作为计算核心部分。具体实现方式如下所示: ##### 配置 YAML 示例 创建一个 `inference_service.yaml` 来声明基于 OpenVINO推理逻辑: ```yaml apiVersion: genaiflux.ai/v1alpha1 kind: InferenceService metadata: name: genai-flux-openvino-service spec: predictor: openvino: modelUri: "gs://my-bucket/models/genai_flux_model.xml" weightsUri: "gs://my-bucket/models/genai_flux_model.bin" ``` 这里指定了云端存储中的 XML 及 BIN 路径来初始化预测器组件[^5]。 --- #### 三、执行推理请求 当一切准备就绪后,可以通过 RESTful API 向已部署的服务发送 JSON 数据以获取实时响应结果。例如使用 curl 工具发起 POST 请求: ```bash curl -X POST http://<service-endpoint>/predict \ -H &#39;Content-Type: application/json&#39; \ -d &#39;{"instances": [[0.1, 0.2], [0.3, 0.4]]}&#39; ``` 这会触发后台依据传入特征向量进行处理返回对应的输出值集合[^6]。 --- #### 四、进一步调整与监控 除了基本功能外还可以考虑加入自动量化技术减少精度损失的同时提高速度;或者借助 TensorBoard 插件可视化整个流水线状态便于调试分析等问题所在之处[^7]。 --- ### 结论 综上所述,将 OpenVINO 应用于 GenAI Flux 不仅能够充分发挥硬件潜能还能有效缩短延迟时间从而满足实际应用场景需求[^8]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值