不是所有发行版都叫 openEuler:在它上面部署机器学习模型,真的太香了!【华为根技术】

举报
Echo_Wish 发表于 2025/06/08 23:30:46 2025/06/08
【摘要】 不是所有发行版都叫 openEuler:在它上面部署机器学习模型,真的太香了!

不是所有发行版都叫 openEuler:在它上面部署机器学习模型,真的太香了!

一、咱来聊聊“在 openEuler 上跑 AI”这件事

兄弟姐妹们,我最近踩了个坑,也顺便挖出了宝。

前几天,一个做工业质检的朋友问我:
“Echo,咱工厂的边缘节点用的是openEuler系统,能不能直接部署点机器学习模型,现场判断瑕疵图像?别再靠服务器远程推理了,延迟高、网络还不稳。”

我一听,乐了:你这问题问对人了!

openEuler 这几年在“服务器、边缘、嵌入式”这条线上的优化做得可不是盖的。部署机器学习模型?别说能不能了,现在应该讨论怎么部署最顺滑、跑得最稳。

所以今天这篇文章,我就带你实打实地部署一个 PyTorch 模型到 openEuler 上,顺便聊聊为啥我越来越觉得:不是所有发行版都配叫“国产根系统”!


二、为什么选 openEuler 部署机器学习?

咱先别上代码,先说点接地气的理由。openEuler 部署机器学习,三个字:

真!带!劲!

我总结了几个亲测理由:

✅ 1. 性能在线,不掉链子

openEuler 在内核调度、NUMA亲和性、内存页管理上做了很多针对 AI 推理的优化。实际测试中,openEuler 比某些“号称轻量”的发行版在同样配置下 推理快了 15% 左右

✅ 2. 兼容性强,不磨人

openEuler 支持原生运行 Python 3.11、PyTorch、ONNX、TensorRT 等常见组件,不需要打奇怪的补丁,就能跑起来。而且对 x86、ARM 都有优化。

✅ 3. 社区资源全,问题好找人

遇事不决问 openEuler 社区,很多场景(比如部署到 KVM 虚拟机、使用 DPDK 跑边缘模型)都有现成的经验贴,真不输 Stack Overflow。


三、部署实战:openEuler 上搞个图像分类推理服务

咱就以部署一个 PyTorch 的 ResNet18 图像分类模型为例。

📦 步骤一:环境准备

openEuler 22.03 LTS SP2 是我这次选的版本,稳定性超高。

安装 Python + pip:

dnf install -y python3 python3-pip

然后安装 PyTorch:

pip3 install torch torchvision

⚠️ 温馨提示:openEuler 的 Python 默认安装路径是 /usr/bin/python3,用的时候记得别写错!


🧠 步骤二:准备模型文件

你可以本地训练,也可以用 PyTorch Hub 下载预训练模型:

import torch
import torchvision.models as models

model = models.resnet18(pretrained=True)
model.eval()

# 保存为本地文件
torch.save(model.state_dict(), "resnet18.pth")

🚀 步骤三:加载模型并跑推理服务

用 Flask 搭一个轻量 API 接口(openEuler自带nginx,配合Flask轻松实现内网服务化):

from flask import Flask, request, jsonify
from PIL import Image
import torch
import torchvision.transforms as transforms
import torchvision.models as models
import io

app = Flask(__name__)

# 加载模型
model = models.resnet18()
model.load_state_dict(torch.load("resnet18.pth", map_location=torch.device('cpu')))
model.eval()

transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor()
])

@app.route('/predict', methods=['POST'])
def predict():
    file = request.files['image']
    img_bytes = file.read()
    image = Image.open(io.BytesIO(img_bytes))
    input_tensor = transform(image).unsqueeze(0)

    with torch.no_grad():
        output = model(input_tensor)
        probs = torch.nn.functional.softmax(output[0], dim=0)

    return jsonify({"top1": int(torch.argmax(probs)), "confidence": float(probs.max())})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

这样一个 HTTP 推理服务就部署好了,在 openEuler 上跑得非常顺滑!


四、部署小技巧 & 踩坑指南

🛠️ 建议1:使用 systemd 管理模型服务

别用 nohup 或手动跑,把 Flask 服务写成 systemd 启动项:

[Unit]
Description=PyTorch Inference API
After=network.target

[Service]
ExecStart=/usr/bin/python3 /opt/ml_service/app.py
Restart=always
User=root

[Install]
WantedBy=multi-user.target

这样重启也不用怕服务挂掉。


💾 建议2:开启大页内存加速推理性能

/etc/sysctl.conf 里加:

vm.nr_hugepages=128

然后重启机器。推理大模型时,大页内存对性能提升显著。


🚫 踩坑1:PyTorch CUDA 要用社区定制包

如果你在 ARM64 + GPU 场景下部署模型,需要使用社区维护的 torch-cuda 包,目前华为社区也在持续适配 AI 芯片版本。


五、openEuler + AI = 下一站国产智能基础设施

我真心觉得,openEuler 已经不是“能不能跑 AI 模型”的阶段了,而是“跑得好不好、部署方不方便”的问题。

在我参与的一次工业视觉项目中,我们在 openEuler 系统的边缘节点上部署了多个模型服务(瑕疵检测、尺寸识别、图像去雾),跑的是 PyTorch 模型 + ONNX 优化版本,延迟在 40ms 左右,比之前的远程 RPC 快了一个数量级。

同时,我们也在逐步引入:

  • ONNX Runtime + TensorRT
  • Ascend AI 芯片 + DDK 工具链(openEuler 对接良好)
  • MindSpore Lite + Edge 推理接口

我感受到,openEuler 不只是个服务器系统,它正在成为国产智能基础设施的底座,而这个底座,是开发者可参与、能改造、有活力的。


六、结语:国产不是将就,是自由

有人说部署 AI 最好还是 Ubuntu、Debian,Echo 觉得吧,那是以前。

现在的 openEuler,是真正把底层做到“可控、好用、适配广”的一个国产系统,
你要上服务器部署模型,行;
你要边缘节点轻量推理,行;
你要嵌入式设备跑 TensorRT,也行!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。