跳转至

英特尔“芯”AI,赋能云边端|第六期:使用 Ollama 在 Core Ultra 高效部署 Qwen3:8b

自第一期起,YiCoreAI 平台凭借 YIAISTUDIO 利用 Arc A770 GPU 高效训练 YOLOv8/v11 和 Qwen-7B,到 YiCONNECT 基于 Kubernetes 实现智能管理,再到 YiEDGE 依托 Core Ultra NPU 实现 40ms 延迟推理,逐步构建云边端 AI 闭环。第五期更在 Ultra 5 125H iGPU 上部署 MedGemma 4B IT,验证便携性。

第六期,Ollama 驱动 Qwen3:8b 在 Core Ultra 上实现高效部署,延迟低至 35ms,准确率超 85%,功耗优化显著,赋能教育心理健康和医疗诊断。

目录

演示视频

设置 Ollama 运行环境

获取 Intel Analytics IPEX 镜像

从 Docker Hub 中提取 IPEX 映像,这里使用私有仓库

docker pull hub.yiqisoft.cn/intelanalytics/ipex-llm-inference-cpp-xpu:latest

启动 Ollama 容器

创建 shell 运行脚本

由于Docker启动容器的命令比较长,所以将其保存为脚本比较方便,方便调整和重启。start-ipex-llm.sh

#!/bin/bash
docker run -d --restart=always \
       --net=bridge \
       --device=/dev/dri \
       -p 11434:11434 \
       -v ~/.ollama/models:/root/.ollama/models \
       -e PATH=/llm/ollama:$PATH \
       -e OLLAMA_HOST=0.0.0.0 \
       -e no_proxy=localhost,127.0.0.1 \
       -e ZES_ENABLE_SYSMAN=1 \
       -e OLLAMA_INTEL_GPU=true \
       -e ONEAPI_DEVICE_SELECTOR=level_zero:0 \
       -e DEVICE=Arc \
       --shm-size="16g" \
       --memory="32G" \
       --name=ipex-llm \
       hub.yiqisoft.cn/intelanalytics/ipex-llm-inference-cpp-xpu:latest \
       bash -c "cd /llm/scripts/ && source ipex-llm-init --gpu --device Arc && bash start-ollama.sh && tail -f /llm/ollama/ollama.log"

运行脚本

sh start-ipex-llm.sh

下载 Qwen3 模型

docker exec ipex-llm ollama pull qwen3:8b

在 Intel Core Ultra 机器上使用 Ollama

资源监控全览

Resource monitoring

使用命令行

docker exec -it ipex-llm ollama run qwen3:8b
  • 运行测试
root@HP:~# docker exec -it ipex-llm ollama run qwen3:8b
>>> 你好
Thinking...
好的,用户发来“你好”,我需要友好回应。首先,确认用户的需求,可能是测试或开始对话。保持自然,用中文回应,避免机械感。可以加入表情符号增加亲切感,同时保持简洁。确保符合规范,不涉及敏感内
容。接下来,用轻松的语气打招呼,并邀请用户提问或分享需求。例如:“你好!😊 有什么我可以帮你的吗?” 这样既友好又开放,鼓励用户进一步互动。
...done thinking.

你好!😊 有什么我可以帮你的吗?

>>> Send a message (/? for help)

使用 API

curl -s http://localhost:11434/v1/completions      -H "Content-Type: application/json"      -d '{
           "model": "qwen3:8b",
           "prompt": "你好"
         }' | json_pp

结果输出

{
   "choices" : [
      {
         "finish_reason" : "stop",
         "index" : 0,
         "text" : "<think>\n嗯,用户发来“你好”,我需要回应。首先,用户可能正在测试我是不是能正常响应,或者只是随便打个招呼。我应该用友好的语气回应,同时保持简洁。\n\n接下来,我要考虑用户可能的意图。他们可能想开始一段对话,或者只是随便聊聊。不管怎样,我应该主动提供帮助,比如询问有什么我可以协助的。\n\n另外,用户可能有不同的需求,比如需要信息、帮助解决问题,或者只是想找人聊天。所以回应要开放,让用户感到被欢迎和被重视。\n\n还要注意语气,保持自然和亲切。避免使用太正式的语言,让用户觉得轻松。比如用“你好!有什么我可以帮你的吗?”这样既友好又开放。\n\n最后,确认回应是否符合规范,没有使用任何markdown格式,保持口语化。检查是否有拼写错误,确保回复正确无误。\n</think>\n\n你好!有什么我可以帮你的吗? 😊"
      }
   ],
   "created" : 1752292111,
   "id" : "cmpl-521",
   "model" : "qwen3:8b",
   "object" : "text_completion",
   "system_fingerprint" : "fp_ollama",
   "usage" : {
      "completion_tokens" : 194,
      "prompt_tokens" : 9,
      "total_tokens" : 203
   }
}

使用 Web UI 驱动

  • 源代码
import streamlit as st
import requests
import PyPDF2
import os

# Ollama API配置
OLLAMA_API_URL = "http://localhost:11434/v1/completions"
MODEL_NAME = "qwen3:8b"

# 初始化会话状态
if "history" not in st.session_state:
    st.session_state.history = []

# Streamlit界面
st.title("企业AI助手 - 产品说明与手册生成")
st.write("基于Qwen3:8b模型,输入提示词或上传文档以生成内容。")

# 提示词输入
prompt = st.text_area("请输入提示词(如:生成产品X的说明)", height=100)

# 文件上传
uploaded_file = st.file_uploader("上传文档(PDF)", type=["pdf"])

# 处理上传文件
if uploaded_file:
    file_path = os.path.join("uploads", uploaded_file.name)
    with open(file_path, "wb") as f:
        f.write(uploaded_file.getbuffer())

    # 提取PDF文本(为后续RAG准备)
    pdf_reader = PyPDF2.PdfReader(file_path)
    text = ""
    for page in pdf_reader.pages:
        text += page.extract_text() or ""
    st.write("已上传文档,提取文本长度:" + str(len(text)) + " 字符")
    # 可将text存入知识库(后续扩展)

# 生成按钮
if st.button("生成"):
    if prompt:
        # 调用Ollama API
        payload = {
            "model": MODEL_NAME,
            "prompt": prompt
        }
        try:
            response = requests.post(OLLAMA_API_URL, json=payload, headers={"Conten
t-Type": "application/json"})
            response.raise_for_status()
            result = response.json()["choices"][0]["text"]
            st.write("生成结果:")
            st.write(result)

            # 保存到历史记录
            st.session_state.history.append({"prompt": prompt, "result": result})
        except requests.exceptions.RequestException as e:
            st.error(f"API调用失败:{e}")
    else:
        st.warning("请输入提示词!")

# 显示历史记录
if st.session_state.history:
    st.subheader("历史记录")
    for i, entry in enumerate(st.session_state.history):
        with st.expander(f"查询 {i+1}: {entry['prompt'][:50]}..."):
            st.write("**输入**:" + entry["prompt"])
            st.write("**输出**:" + entry["result"])
  • 运行
pip install streamlit
streamlit run webui.py
Streamlit Web UI

早期内容

英特尔“芯”AI,赋能云边端|第五期:MedGemma-4B 赋能智能医疗,基于 Core Ultra 的高效部署

英特尔“芯”AI,赋能云边端|第四期:闭环赋能,助力企业和组织实现数字化和 AI 转型

英特尔“芯”AI,赋能云边端|第三期:YiCONNECT 和 YiEDGE 实现高效管理与边缘推理

英特尔“芯”AI,赋能云边端|第二期:用英特尔 Arc 系列显卡高效训练 YOLO 和 Qwen-7B

英特尔“芯”AI,赋能云边端|第一期:开启 AI 新时代的云边端闭环