当前位置: 首页 > news >正文

写给新手的 tensorflow:昇腾 TensorFlow 适配到底是啥?

之前做 TensorFlow 模型迁移,兄弟问我:“哥,我们的 TensorFlow 模型能在昇腾上跑吗?还是要全部重写?”

我说能,用 tensorflow 适配。

好问题。今天一次说清楚。

tensorflow 是啥?

tensorflow 是 TensorFlow 官方的昇腾适配。让你用原生 TensorFlow 接口跑昇腾,不用改代码。

一句话说清楚:tensorflow 是 TensorFlow 官方的昇腾 NPU 适配,让你在昇腾上直接用tf.xxx接口,不用魔改。

你说气人不气人,之前要改 TensorFlow 源码才能用昇腾,现在一行代码都不用改。

为什么要用 tensorflow?

三个字:原生支持

不用 tensorflow(魔改版)

# 之前:要用魔改版的 TensorFlowimporttensorflow_npu# 魔改版# 有些接口不兼容model=tensorflow_npu.NPUModel(...)# 特殊接口# 一些功能用不了# tf.distribute.MirroredStrategy() # 不支持# tf.saved_model.save() # 要额外配置

用 tensorflow(官方版)

# 现在:用官方 TensorFlowimporttensorflowastf# 官方版# 完全原生接口model=tf.keras.Sequential([...])# 标准 TensorFlow# 所有功能都支持strategy=tf.distribute.MirroredStrategy()tf.saved_model.save(model,"model")

你说气人不气人,现在昇腾和 GPU 的差距就是一个后端。

核心概念就三个

1. NPU 后端

tensorflow 注册了npu后端:

importtensorflowastf# 检查是否有 npu 后端print("NPU available:",tf.config.list_physical_devices('NPU'))# 创建 NPU 张量x=tf.constant([1,2,3],dtype=tf.float32)x=tf.identity(x)# 搬到 NPU(自动)# 指定设备withtf.device('/NPU:0'):y=tf.matmul(x,x)print(y)

2. 设备映射

tensorflow 自动映射设备和内存:

importtensorflowastf# 设备映射# "/NPU:0" → 昇腾 NPU 0 号设备# "/GPU:0" → NVIDIA GPU 0 号设备# "/CPU:0" → CPU# 自动选择设备devices=tf.config.list_physical_devices()print("Available devices:",devices)# 张量设备x=tf.constant([1,2,3])print(x.device)# 空(在 CPU 上)withtf.device('/NPU:0'):y=tf.constant([1,2,3])print(y.device)# /NPU:0# 模型设备model=tf.keras.Sequential([...])model=tf.keras.models.load_model("model")

3. 内存管理

tensorflow 自动管理 NPU 内存:

importtensorflowastf# 自动内存复用# tensorflow 自动:# 1. 分配和释放内存# 2. 内存碎片整理# 3. 显存缓存# 手动控制显存缓存gpus=tf.config.list_physical_devices('NPU')ifgpus:try:# 限制显存使用量tf.config.set_logical_device_configuration(gpus[0],[tf.config.LogicalDeviceConfiguration(memory_limit=8192)])# 8GBexceptRuntimeErrorase:print(e)# 查看显存# 用 npu-smi 查看

为什么要用 tensorflow?

三个理由:

1. 代码不用改

原来 GPU 的代码,搬到昇腾只要改一个字符串:

# GPU 代码withtf.device('/GPU:0'):model=tf.keras.Sequential([...])# 昇腾代码(只改一个字符串)withtf.device('/NPU:0'):model=tf.keras.Sequential([...])

2. 功能全支持

TensorFlow 的新功能,tensorflow 都支持:

importtensorflowastf# tf.distribute(分布式训练)strategy=tf.distribute.MirroredStrategy()withstrategy.scope():model=tf.keras.Sequential([...])# tf.saved_model(模型保存)tf.saved_model.save(model,"model")# tf.keras.applications(预训练模型)model=tf.keras.applications.ResNet50(weights=None,input_shape=(224,224,3))# tf.data(数据管道)dataset=tf.data.Dataset.from_tensor_slices((x_train,y_train))dataset=dataset.batch(32).repeat()

3. 性能不差

tensorflow 的性能和魔改版差不多:

importtensorflowastfimporttime# 创建模型model=tf.keras.Sequential([tf.keras.layers.Dense(4096,activation='relu'),tf.keras.layers.Dense(4096,activation='relu'),tf.keras.layers.Dense(10,activation='softmax')])model.compile(optimizer='adam',loss='sparse_categorical_crossentropy')# 生成数据x=tf.random.normal((1024,4096))y=tf.random.uniform((1024,),maxval=10,dtype=tf.int32)# 预热model.fit(x,x,batch_size=32,epochs=1,verbose=0)# 测性能start=time.time()model.fit(x,x,batch_size=32,epochs=3,verbose=0)elapsed=time.time()-startprint(f"Time:{elapsed:.2f}s")print(f"Throughput:{1024*3/elapsed:.0f}samples/sec")

你说气人不气人,TensorFlow 官方支持,用起来和 GPU 一样。

怎么用?代码示例

示例 1:基础推理

importtensorflowastf# 检查 NPU 可用print("NPU available:",tf.config.list_physical_devices('NPU'))# 创建模型model=tf.keras.Sequential([tf.keras.layers.Dense(256,activation='relu',input_shape=(784,)),tf.keras.layers.Dense(10,activation='softmax')])# 创建输入x=tf.random.normal((32,784))# 推理withtf.device('/NPU:0'):output=model(x)print(f"Output shape:{output.shape}")

示例 2:训练

importtensorflowastf# 数据(x_train,y_train),(x_test,y_test)=tf.keras.datasets.mnist.load_data()x_train=x_train.reshape(-1,784).astype('float32')/255.0x_test=x_test.reshape(-1,784).astype('float32')/255.0# 模型model=tf.keras.Sequential([tf.keras.layers.Dense(256,activation='relu',input_shape=(784,)),tf.keras.layers.Dense(10,activation='softmax')])model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练withtf.device('/NPU:0'):history=model.fit(x_train,y_train,batch_size=32,epochs=3,validation_split=0.1)# 评估test_loss,test_acc=model.evaluate(x_test,y_test,batch_size=32)print(f"Test accuracy:{test_acc:.4f}")

示例 3:分布式训练

importosimporttensorflowastf# 环境变量设置os.environ['TF_CONFIG']='{"cluster": {"worker": ["localhost:12345"]}, "task": {"type": "worker", "index": 0}}'# 分布式策略strategy=tf.distribute.MirroredStrategy()withstrategy.scope():# 在策略范围内创建模型model=tf.keras.Sequential([tf.keras.layers.Dense(256,activation='relu',input_shape=(784,)),tf.keras.layers.Dense(10,activation='softmax')])model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 数据(x_train,y_train),_=tf.keras.datasets.mnist.load_data()x_train=x_train.reshape(-1,784).astype('float32')/255.0# 训练model.fit(x_train,y_train,batch_size=32*strategy.num_replicas_in_sync,# 缩放 batch sizeepochs=3)

示例 4:模型保存和加载

importtensorflowastf# 创建模型model=tf.keras.Sequential([tf.keras.layers.Dense(256,activation='relu',input_shape=(784,)),tf.keras.layers.Dense(10,activation='softmax')])# 编译model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics=['accuracy'])# 训练(简单训练一下)x=tf.random.normal((1000,784))y=tf.random.uniform((1000,),maxval=10,dtype=tf.int32)model.fit(x,y,batch_size=32,epochs=1,verbose=0)# 保存模型model.save('/tmp/mnist_model')print("Model saved.")# 加载模型loaded_model=tf.keras.models.load_model('/tmp/mnist_model')print("Model loaded.")# 推理test_input=tf.random.normal((1,784))output=loaded_model(test_input)print(f"Output shape:{output.shape}")

性能数据

在昇腾 910 上对比 GPU:

操作A100 GPUAscend 910备注
推理 (ResNet50)4.5ms4.8ms差不多
训练 (batch=32)120ms130ms略慢
分布式NCCLHCCL都支持
模型保存支持支持都支持

你说气人不气人,现在昇腾和 GPU 差距已经很小了。

跟其他仓库的关系

tensorflow 在 CANN 架构里属于TensorFlow 官方适配,是昇腾对接 TensorFlow 的桥梁

依赖关系:

TensorFlow(官方框架) ↓ 适配 tensorflow(昇腾适配) ↓ 调用 hccl / hcomm(通信) ↓ 调用 硬件(昇腾 NPU)

解释一下:

  • TensorFlow:官方深度学习框架
  • tensorflow:昇腾适配层
  • hccl / hcomm:昇腾通信库
  • 硬件:昇腾 NPU

简单说:tensorflow是 TensorFlow 和昇腾之间的桥梁。

tensorflow 的核心能力

1. 张量操作

importtensorflowastf# 创建 NPU 张量x=tf.constant([1,2,3],dtype=tf.float32)withtf.device('/NPU:0'):y=tf.matmul(x,x)

2. 模型操作

importtensorflowastf# 模型迁移到 NPUwithtf.device('/NPU:0'):model=tf.keras.Sequential([...])# 模型保存和加载model.save("model")loaded_model=tf.keras.models.load_model("model")

3. 分布式

importtensorflowastf# 分布式策略strategy=tf.distribute.MirroredStrategy()withstrategy.scope():model=tf.keras.Sequential([...])

4. 数据处理

importtensorflowastf# 数据管道dataset=tf.data.Dataset.from_tensor_slices((x_train,y_train))dataset=dataset.batch(32).repeat()# 在 NPU 上训练model.fit(dataset,epochs=3)

适用场景

什么情况下用 tensorflow:

  • TensorFlow 迁移:GPU 代码迁到昇腾
  • 原生支持:想要 TensorFlow 官方支持
  • 工业部署:TensorFlow Serving

什么情况下不用:

  • PyTorch 项目:用 torchtitan-npu
  • 极致性能:用算子库更底层

总结

tensorflow 就是 TensorFlow 的昇腾适配:

  • 原生接口:和 GPU 完全一样的接口
  • 功能全:分布式、模型保存都支持
  • 代码不改:GPU 代码迁移只要改一个字符串
http://www.jsqmd.com/news/873259/

相关文章:

  • Anthropic 企业采用率首次反超 OpenAI:Ramp 5 月数据复盘
  • 挖码AI助手实战评测:一个平台搞定文生视频、PPT与对话,多模型切换到底有多强?
  • 日常办公必备:2026实测几种主流PDF压缩工具推荐分享 - 时讯资讯
  • 市场比较好的石牌坊品牌推荐,单门石牌坊/花岗岩石牌坊/石牌坊/石雕石牌坊/复式石牌坊,石牌坊公司推荐 - 品牌推荐师
  • 从零搭建政务AI Agent系统:37个部委级审批节点穿透解析,含国产化信创环境适配清单(麒麟V10+昇腾910B实测版)
  • nginx中间代理。前端下载资源跨域,太大不想放到服务端处理。
  • 核心优势驱动:Centric PLM如何破解跨境电商多市场协同难题
  • 用 MapleSim 卷绕和卷材加工仿真库加速智能制造与电池产线优化
  • 没有外机位也能装?厨房空调水冷方案全解:从散热原理到冷凝水回收 - 奔跑123
  • 抖音视频怎么提取无水印版本?2026年抖音无水印视频提取工具推荐 - 科技大爆炸
  • AI Agent写作如何重构内容生产力:3个已被验证的行业增效模型及ROI测算公式
  • 微电网协调控制柜 vs 传统配电柜:本质差异与代际跨越
  • 终极Scribd电子书下载指南:3步打造个人离线图书馆
  • 从“各卖各的”到“一盘棋”——服装老板用了怎样的ERP+分销系统
  • 2026年郑州企业做GEO优化怎样选择服务商?本地靠谱机构盘点解析 - 哈喽33
  • 2026年一键生成论文工具实测报告:5款神器从文献到降重一站式避坑指南
  • AIGC 内容安全检测服务精选公司:天磊卫士(深圳)科技有限公司
  • 这不是一个浪漫古士
  • RDPWrap完整指南:免费解锁Windows多用户远程桌面实用教程
  • 数据说话:驱动芯片的关键性能指标与设计挑战
  • 生产环境的“后悔药”:如何利用 Dify 版本控制与回滚机制建立 AI 应用的 CI/CD 闭环?
  • 豆包获客讲师:深度专业评估与独家解析
  • 保险领域OCR选型指南:楚识科技让理赔从7天缩至1小时,识别率高达99.6%
  • 突破性升级:Windows Package Manager 1.8让软件管理效率提升300%
  • AI搜索时代品牌可见度提升:GEO优化与大模型优先推荐机制解析
  • GalTransl:面向视觉小说的AI驱动翻译系统架构解析
  • Taotoken 的 API Key 权限管理与审计日志功能在安全开发中的价值
  • 从频繁处理超时到稳定响应谈谈我使用Taotoken路由能力后的改变
  • 可酷实现 AI 智能音乐关键技术突破,推动音乐行业迈入智能化新阶段
  • 中小企业软件开发避坑指南:资深团队总结实战经验