用人工智能打造人工智能
· 5 min read
关键术语
AI 编程
- AI Pair Programming(人工智能结对编程)--人类与人工智能助手之间的协作式软件开发,可交互式地提出代码建议。
- GitHub Copilot- 来自 GitHub 的人工智能编程工具,可在开发人员输入代码时实时提供上下文感知的代码建议和整个功能。
- Code Whisperer- 亚马逊的智能编码助手,由 CodeGuru 和 GPT-3 提供代码片段和文档建议。仍处于预览阶段。
- OpenAI Codex- 来自 OpenAI 的人工智能系统,经过代码训练,可将自然语言翻译为代码,并建议人类编程的可能性。
- 负责任的人工智能 - 开发和部署尊重人权和民主价值观(如透明度、隐私、非歧视和问责制)的人工智能。
人工智能
- 生成式人工智能(Generative AI)--人工智能系统可创建图像、音频、视频和文本等新内容,这些内容看起来与人类输出的内容一致。
- Diffusion Model(扩散模型)--人工智能生成技术,它可以反复推敲图像,添加微小细节,直至达到逼真的效果。
- Stability AI- 由艺术家创建的公司,专注于开发用于创作而非利用的开源生成模型。
- DALL-E- 由 OpenAI 创建的生成式人工智能系统,可根据文本描述创建逼真的图像和艺术。
- 透明度--规定人工智能系统的数据来源、开发方法和基准指标应公开披露以建立信任的原则。
Using Transfer Learning (fine-tuning)
微调: 使用新的文学数据库训练新闻总结模型获得文学总结模型。
ONNX(Open Neural Network Exchange)详解
ONNX 是一种开放的 机器学习模型交换格式,由微软和 Facebook(现 Meta)联合推出,旨在解决不同深度学习框架(如 PyTorch、TensorFlow)之间的模型兼容性问题。它允许开发者在一个框架中训练模型,并迁移到另一个框架中部署,无需重写代码。
1. 核心概念
(1)核心目标
- 跨框架兼容性:支持 PyTorch、TensorFlow、MXNet、Scikit-learn 等框架的模型转换。
- 标准化模型表示:使用统一的
.onnx
文件格式存储模型结构和权重。 - 优化推理性能:支持硬件加速(如 ONNX Runtime、TensorRT)。
(2)文件组成
- 模型结构:用 Protobuf 格式描述网络层(如卷积、全连接)。
- 模型权重:存储训练后的参数。
- 元数据:输入/输出张量的形状和数据类型。
2. 工作原理
(1)模型导出(Export)
将训练好的模型从原生框架(如 PyTorch)转换为 .onnx
文件:
import torch
model = torch.load("model.pth") # 加载PyTorch模型
dummy_input = torch.randn(1, 3, 224, 224) # 示例输入
torch.onnx.export(
model,
dummy_input,
"model.onnx",
input_names=["input"],
output_names=["output"]
)
(2)模型推理(Inference)
使用 ONNX Runtime 或其他支持 ONNX 的引擎运行模型:
import onnxruntime as ort
sess = ort.InferenceSession("model.onnx")
input_data = np.random.randn(1, 3, 224, 224).astype(np.float32)
outputs = sess.run(["output"], {"input": input_data})
3. 核心优势
(1)跨平台部署
- 硬件支持:可在 CPU、GPU(CUDA)、NPU 等设备上运行。
- 推理引擎:兼容 ONNX Runtime、TensorRT、OpenVINO 等。
- 边缘计算:适合移动端(Android/iOS)和嵌入式设备(树莓派)。
(2)性能优化
- 量化:将 FP32 模型转换为 INT8,减少计算量和内存占用。
- 图优化:融合冗余计算层(如 Conv+ReLU → FusedConv)。
(3)工具生态
- 可视化工具:Netron(查看模型结构)。
- 转换工具:
tf2onnx
(TensorFlow → ONNX)、skl2onnx
(Scikit-learn → ONNX)。
4. 典型应用场景
- 跨框架迁移
- 从 PyTorch 训练 → TensorFlow Lite 部署到手机端。
- 生产环境加速
- 用 ONNX Runtime 替代原生框架推理,提升吞吐量。
- 边缘设备部署
- 将模型转换为 ONNX 后,在 Jetson、树莓派上运行。
5. 局限性
问题 | 解决方案 |
---|---|
某些框架算子不支持 | 自定义算子或使用替代实现 |
动态形状限制 | 导出时固定输入尺寸或使用动态轴 |
量化后精度损失 | 校准数据集优化量化参数 |
6. 与其他格式对比
格式 | 特点 | 适用场景 |
---|---|---|
ONNX | 跨框架、标准化 | 多平台部署 |
TorchScript | PyTorch 原生格式 | PyTorch 生态内推理 |
TensorFlow SavedModel | TensorFlow 专用 | TensorFlow 服务化部署 |
TFLite | 针对移动端优化 | Android/iOS 应用 |
7. 快速体验
- 安装工具包:
pip install onnx onnxruntime torch
- 导出 PyTorch 模型(示例):
import torch.onnx
model = torch.nn.Linear(10, 2)
torch.onnx.export(model, torch.randn(1, 10), "linear.onnx") - 用 Netron 可视化模型:
pip install netron
netron linear.onnx
总结
- ONNX 是深度学习模型的“中间语言”,打破框架壁垒。
- 推荐使用场景:需要跨框架部署、硬件加速或边缘计算的项目。
- 官网与资源:
- 官网:onnx.ai
- GitHub:onnx/onnx
- 模型库:ONNX Model Zoo