框架大冒险:开发者的奇幻之旅

1 概述

1.1 案例介绍

在人工智能技术飞速发展的今天,AI基础框架如同智能世界的“地基”,为各类应用提供底层支撑与核心驱动力。它通过整合数据、算法与工具链,构建起从开发到落地的完整技术生态。
通过本次实操,可以使开发者了解PyTorch、TensorFlow、MindSpore框架间的区别,以及不同框架的各自特点。

1.2 适用对象

  • 个人开发者
  • 高校学生

1.3 案例时间

本案例总时长预计90分钟。

1.4 案例流程

0418.png

说明:

① 用户登录华为开发者空间,进入CodeArts IDE创建项目工程;
② 构建项目完成后,编写代码运行。

1.5 资源总览

本案例预计花费0元。

资源名称规格单价(元)时长(分钟)
开发者空间-云主机2vCPUs | 4GB X86
CodeArts IDE for Python
090

框架大冒险:开发者的奇幻之旅👈👈👈完整版案例请点这里进行查看

2 环境准备

2.1 开发者空间配置

面向广大开发者群体,华为开发者空间提供一个随时访问的“开发桌面云主机”、丰富的“预配置工具集合”和灵活使用的“场景化资源池”,开发者开箱即用,快速体验华为根技术和资源。
如何还没有领取开发者空间云主机,可以参考免费领取云主机文档领取。
领取云主机后可以直接进入华为开发者空间工作台界面,点击进入桌面连接云主机。

3.1.png

云主机桌面如下:
552fc96c3b58a06e294e4a760ae719e3.PNG

3 框架介绍

3.1 PyTorch框架

PyTorch是由Facebook(现Meta)AI研究院于2016年推出的开源深度学习框架,基于Torch库开发,凭借其动态算图、易用性和强大的灵活性,迅速成为学术界和工业界的主流工具。其设计哲学是以“以Python优先”,与Python生态无缝集成,支持快速原型设计和生产部署。

3.1.1 测试文件创建及环境配置

进入到云主机桌面后,打开CodeArts IDE for Python。

75886d2504b79068987e89b6286ddf40.PNG

打开后,点击新建工程,工程名称输入pytorch_demo,点击创建。

1c1997ccdd7124e02d6f9bfb68033c8f.PNG

创建完成后,点击下方终端按钮,下载Pytorch框架,将以下命令复制到终端中。

pip install torch -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

1b455d3035683a0f55918db22dead6d6.PNG

下载完毕后,在IDE左侧项目管理处,点击新建文件,输入名称为test_one.py,输入完毕后按下回车键。

a6d5443255e211820027688028ab66be.PNG

3.1.2 PyTroch框架特点及实操

PyTorch框架的核心特点:

1. 动态计算图(Dynamic Computation Graph)

即时执行(Eager Execution):PyTorch使用动态图机制,允许在代码运行时动态构建和修改计算图,便于调试和直观理解模型逻辑;

灵活性:适合处理可变长度输入(如自然语言处理中的序列数据)、复杂控制流(如循环、条件分支)的模型设计。

动态图允许在运行时构建和修改计算流程,适合灵活模型设计和调式。

(1) 即时执行与调试实例,将以下代码复制到上方创建的test_one.py文件中。

import torch

# 动态构建计算图(无需预先定义完整结构)
a = torch.tensor(2.0, requires_grad=True)
b = torch.tensor(3.0, requires_grad=True)
c = a * b  # 前向传播时动态生成计算图

# 随时打印中间结果(调试友好)
print("c =", c)  # 输出: tensor(6., grad_fn=<MulBackward0>)

# 反向传播自动计算梯度
c.backward()
print("a的梯度:", a.grad)  # 输出: tensor(3.) 
print("b的梯度:", b.grad)  # 输出: tensor(2.)

e5beb57b1ca77adb743fd04d8786c215.PNG

复制完毕后,在终端输入命令python test_one.py运行文件。

9e56df64ed3504d064e4446578dd3e4c.PNG

示例代码关键点:

  • 在代码运行时直接执行操作(类似普通Python代码),无需定义静态图;
  • 可随时插入print或断点调试,直观查看中间变量(如c的值和梯度)。

(2) 灵活性示例演示,将上面代码进行注释(选中代码,同时按住键盘Ctrl和问号键进行注释),注释效果如下:

a7e0d854d454c1ca202ae09ca96777e2.PNG

注释完毕后将下面代码复制到test_one.py中。

import torch
import torch.nn as nn

# 定义一个动态调整结构的简单模型
class DynamicModel(nn.Module):
    def forward(self, x):
        # 根据输入长度动态决定处理逻辑
        if x.shape[1] > 10:  # 假设 x 是 (batch_size, seq_length)
            return nn.Linear(x.shape[1], 1)(x)  # 长序列用线性层
        else:
            return x.sum(dim=1, keepdim=True)  # 短序列直接求和

# 测试不同长度的输入
model = DynamicModel()
short_input = torch.randn(2, 5)    # 短序列(长度5)
long_input = torch.randn(2, 20)    # 长序列(长度20)

print(model(short_input))  # 输出形状: (2, 1)
print(model(long_input))   # 输出形状: (2, 1)

972d8e29234c1d88e5e91733fd558b60.PNG

复制完毕后打开下方终端,终端输入python test_one.py运行。

026581fb72844ab2773f78d11a92e4d8.PNG

示例代码关键点:

  • 在forward函数中根据输入条件动态调整计算路径(如if-else分支);
  • 适用于处理可变长度数据(如文本、语音),无需预先固定计算图结构。

2. 模块化与易用性
Torch.nn模块:提供预定义层(如卷积层、LSTM)、损失函数和优化器,支持自定义模块扩展;
Pythonic接口:代码风格简洁,与Python科学计算库(如Numpy、SciPy)兼容性极佳。
模块化设计:使用torch.nn快速构建模型。

PyTorch通过预定义层、损失函数和优化器实现高度模块化,同时支持灵活扩展。

(1) 预定组件快速搭建网络代码示例,重新创建新的py文件,文件名为test_two.py。
64b64484e11f01685200c0c2037f9081.PNG

创建完毕后将以下代码复制到test_two.py文件中。

import torch
import torch.nn as nn
import torch.optim as optim

# 使用 Sequential 快速堆叠层(类似 Keras)
model = nn.Sequential(
    nn.Linear(784, 256),    # 全连接层(输入784维,输出256维)
    nn.ReLU(),              # 激活函数
    nn.Dropout(0.2),        # 随机失活
    nn.Linear(256, 10)      # 输出层(10分类)
)

# 预定义损失函数与优化器
loss_fn = nn.CrossEntropyLoss()       # 交叉熵损失
optimizer = optim.Adam(model.parameters(), lr=0.001)  # Adam优化器

# 模拟输入数据(批量大小64,输入维度784)
inputs = torch.randn(64, 784)        # 随机生成数据
labels = torch.randint(0, 10, (64,)) # 随机生成标签(0-9)

# 前向传播与计算损失
outputs = model(inputs)
loss = loss_fn(outputs, labels)

# 反向传播与参数更新
optimizer.zero_grad()  # 清空梯度
loss.backward()        # 自动计算梯度
optimizer.step()       # 更新参数

print("损失值:", loss.item())

复制完毕后,在终端输入python test_two.py运行test_two.py文件。

1de1716fe05298f72503bbed09b57180.PNG

示例代码关键点:

  • nn.Sequential允许像搭积木一样组合层,适合简单模型;
  • 损失函数(如CrossEntropyLoss)和优化器(如Adam)开箱即用;
  • 只需要关注数据流向,无需手动实现反向传播。

(2) 自定义模块扩展代码示例,将以上代码进行注释后,将以下代码复制到test_two.py中。

import torch
import torch.nn as nn
class CustomCNN(nn.Module):
    def __init__(self):
        super().__init__()
        # 预定义层组合
        self.conv_layers = nn.Sequential(
            nn.Conv2d(3, 16, kernel_size=3, padding=1),  # 输入通道3,输出16
            nn.ReLU(),
            nn.MaxPool2d(2),                            # 池化缩小尺寸
            nn.Conv2d(16, 32, kernel_size=3, padding=1),
            nn.ReLU(),
            nn.MaxPool2d(2)
        )
        # 自定义计算逻辑
        self.fc = nn.Linear(32 * 8 * 8, 10)  # 假设经过卷积后特征图尺寸8x8

    def forward(self, x):
        x = self.conv_layers(x)
        x = x.view(x.size(0), -1)  # 展平多维特征
        return self.fc(x)

# 实例化并使用模型
model = CustomCNN()
print(model)  # 自动打印网络结构

复制完毕后在终端输入python test_two.py运行py文件。

1667dcabb72e009a7478385541663299.PNG

自定义模块代码示例关键点:

  • 继承nn.Module可自由组合预定义层和自定义逻辑;
  • Forward函数定义数据流向,支持任意python控制流(如循环、条件判断);
  • 打印模型时自动显示层级结构,便于调试。
  1. 自动微分(Autograd)

自动求导引擎:通过追踪张量操作自动计算梯度,无需手动编写反向传播代码;
计算图动态生产:每次前向传播构建新的计算图,适合动态模型(如RNN、Transformer)。
PyTorch通过追踪张量操作自动构建计算图并计算梯度,新建文件test_three.py文件,并将以下代码复制到test_three.py文件中。

import torch

# 创建需要梯度的张量
x = torch.tensor(2.0, requires_grad=True)
y = torch.tensor(3.0, requires_grad=True)

# 定义计算(自动记录操作到计算图)
z = x**2 + y * 3  
loss = z.mean()     # 标量才能直接调用 backward()

# 自动计算梯度(链式法则)
loss.backward()

print("x的梯度:", x.grad)  # dz/dx = 2x → 2*2=4
print("y的梯度:", y.grad)  # dz/dy = 3 → 3

复制到文件中后,在终端输入python test_three.py,运行文件。

ced92063068a9d9d27c6008eca58cba3.PNG

关键点:

  • requires_grad = True:表示追踪该张量的所有操作;
  • backward():自动计算所有关联张量的梯度并累积到**.grad**属性;
  • 计算图在每次前向传播时动态生成,执行后立即释放(节省内存)。

想要了解更多PyTorch框架信息可前往以下地址:PyTorch 插件

3.2 TensorFlow框架

TensorFlow是由Google Brain团队开发的开源深度学习框架,于2015年发布。其设计目标是支持大规模分布式训练和生产部署,以静态计算图(早期)和高性能计算著称。随着TensorFlow2.0的推出,它融合了动态图的易用性和静态图的优化能力。

3.2.1 环境配置

在终端输入以下命令,下载TensorFlow资源包。

pip install tensorflow -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

9d14ba1a7261b1720f077a08fad6ad9f.PNG

3.2.2 TensorFlow框架特点及实操

TensorFlow框架的核心特点:

1. 计算图(Graph)与执行模型

  • 动态计算图

即时执行:像普通Python代码一样逐行执行,无需预先定义完整计算图。

优势:

调试直观(可实时打印中间结果);
支持动态控制流(如循环、条件分支)。

在CodeArts IDE for PyThon中新建tf_one.py文件,将以下代码复制进去。

import tensorflow as tf

# 动态图模式(默认启用)
x = tf.constant(5.0)
y = tf.constant(2.0)
z = x ** 2 + tf.math.log(y)  # 即时计算
print("动态图结果:", z.numpy())  # 25.0 + 0.693 ≈ 25.693

# 动态控制流示例
if z > 10:
    output = z * 2
else:
    output = z / 2
print("动态分支结果:", output.numpy())  # 输出 51.386

bb0f2432f631dfae1be7ac1b355e2b7f.PNG

复制完毕后,在终端输入python tf_one.py运行文件。

18e8ce4f19d804c08ba61518cea5f93f.PNG

动态图示例代码核心特点:

① 即时执行:像普通Python代码一样逐行运行,支持print和断点调试;

② 灵活控制流:允许在模型中使用if、循环等动态逻辑,适合RNN或条件模型;

③ 性能损失:动态图未优化,训练速度可能慢于静态图。

  • 混合模式(tf.function加速)

将Python函数编译为静态图:结合动态图的易用性和静态图的性能。

典型用途:训练循环、高性能推理

将上面代码注释后,将以下代码复制到tf_one.py文件中。

import tensorflow as tf
@tf.function
def compute(x, y):
    return x ** 2 + tf.math.log(y)

print(compute(3.0, 2.0))  # 输出 9.0 + ln(2) ≈ 9.693

3e0048a26692258a7fc67e66e7d338ca.PNG

复制完毕后,在终端运行输入python tf_one.py运行文件。

be15fedbe5ebb8af1c39fb2ddc359704.PNG

混合模式示例代码的特点:

1. 性能优化:通过tf.function将动态代码转为静态图,提升计算速度;

2. 透明转换:用户无需修改代码逻辑,装饰器自动处理图案;

3. 调试支持:可在Eager Execution模式下调试,在切换为静态图优化。

  • 模块化与高阶API(Keras)

预构建模型组件:

层(Layers):卷积层(Conv2D)、LSTM、注意力机制等;

损失函数:交叉熵(CrossEntropyLoss)、均方误差(MSE);

优化器:Adam、SGD、RMSprop。

快速构建模型代码示例,新建tf_two.py文件,将以下代码复制到tf_two.py文件中:

from tensorflow.keras import layers, models

# 定义模型输入(假设输入是28x28的灰度图像)
input_tensor = layers.Input(shape=(28, 28, 1))  # 输入形状 (None, 28, 28, 1)

# --------------------------
# 第一阶段:卷积特征提取
# --------------------------
x = layers.Conv2D(32, kernel_size=(3,3), activation='relu')(input_tensor)  # 输出形状 (None, 26, 26, 32)
x = layers.MaxPooling2D(pool_size=(2,2))(x)  # 输出形状 (None, 13, 13, 32)

# --------------------------
# 第二阶段:时空特征转换
# --------------------------
# 将空间维度转换为时间序列维度
# Reshape后的形状:(None, 13*13=169个时间步, 32个特征)
x = layers.Reshape((13*13, 32))(x)  # 输出形状 (None, 169, 32)

# LSTM处理时序数据(返回完整序列)
lstm_output = layers.LSTM(64, return_sequences=True)(x)  # 输出形状 (None, 169, 64)

# --------------------------
# 第三阶段:注意力机制
# --------------------------
# 将LSTM输出同时作为查询(query)和值(value)(自注意力机制)
# 通过函数式API显式定义多输入
attention_output = layers.Attention()([lstm_output, lstm_output])  # 输出形状 (None, 169, 64)

# --------------------------
# 第四阶段:输出处理
# --------------------------
# 对注意力输出做全局平均池化(根据任务选择其他方式)
x = layers.GlobalAveragePooling1D()(attention_output)  # 输出形状 (None, 64)

# 添加全连接输出层(假设是10分类任务)
output_tensor = layers.Dense(10, activation='softmax')(x)

# 构建完整模型
model = models.Model(inputs=input_tensor, outputs=output_tensor)

# 打印模型结构
model.summary()

932fc7bc3f22bc2115a74be23618a164.PNG

运行结果:

faade8563c41daa87546a5313577e0b0.PNG

示例代码关键点:

第一阶段:卷积特征提取:

使用卷积层(Conv2D)提取图像的空间特征:

  • 卷积核大小为(3,3),激活函数为ReLU;
  • 输出形状为(None,26,26,32),表示经过卷积后,空间尺寸减少到26x26,特征数量为32

使用最大池化层(MaxPooling2D)下采样,进一步压缩空间维度:

  • 池化窗口大小为(2,2);
  • 输出形状为(None,13,13,32),空间维度降为13x13。

第二阶段:时空特征转换:

将卷积输出的空间维度展平为时间序列:

  • 使用Reshape层将(13,13,32),转换为(169,32),即将13x13的空间点视为169个时间步,每个时间步有32个特征。

使用LSTM层处理时间序列数据:

  • LSTM单元数为64,返回完整序列(return_sequences=True);
  • 输出形状为(None,169,64),表示每个时间步的特征维度增加到64。

第三阶段:注意力机制

使用自注意力机制(self-Attention)对LSTM输出进行加权:

  • 将LSTM输出同时作为查询(Query)和值(Value),通过layers.Attention()实现;
  • 输出形状仍为(None,169,64),但特征已经根据注意力权重进行增强。

第四阶段:输出处理:

对注意力输出进行全局平均池化:

  • 使用GlobalAveragePooling1D层对时间步维度进行平均,得到固定长度的特征向量;
  • 输出形状为(None,64),表示每个样本的特征维度为64;

添加全连接层(Dense)生成最终分类结果:

  • 输出层单元数为10(假设是10分类任务),激活函数为softmax;
  • 输出形状为(None,10),表示每个样本属于10个类别之一的概率分布

想要更多了解TensorFlow可以前往以下地址:关于TensorFlow | TensorFlow中文官网

3.3 MindSpore框架

MindSpore是由华为开发的全场景AI计算框架,支持端(终端设备)、边(边缘计算)、云(云计算)多场景协同,旨在降低AI开发门槛、提升计算效率,并与昇腾(Ascend)AI处理器深度协同,实现软硬件一体化优化。

3.3.1 环境配置

在终端输入以下命令进行MindSpore框架下载:

pip install mindspore -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

15366c3c1f1863f8db056b5728b223c9.PNG

3.3.2 MindSpore框架特点及实操

特点:

  • 易开发:提供Python原生编程接口,支持动态图与静态图统一编码;
  • 高效执行:通过编译优化、自动并行等技术提升训练与推理性能;
  • 全场景覆盖:支持从移动端到云端的灵活部署。

首先,在CodeArts IDE for Python中新建python ms_one.py文件,创建好后,将以下示例代码复制到ms_one.py文件中。

import mindspore as ms
from mindspore import nn, ops, Tensor
import numpy as np
from mindspore.dataset import GeneratorDataset
from mindspore.train import Model, LossMonitor

# 1. 自定义数据集生成器(不依赖外部数据)
class RandomDataGenerator:
    def __init__(self, num_samples=1000, image_size=(32, 32), num_classes=10):
        self.num_samples = num_samples
        self.image_size = image_size
        self.num_classes = num_classes
        self.index = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.index < self.num_samples:
            # 生成随机图像数据 (3通道)
            image = np.random.rand(3, *self.image_size).astype(np.float32)
            # 生成随机标签
            label = np.random.randint(0, self.num_classes, dtype=np.int32)
            self.index += 1
            return image, label
        else:
            self.index = 0
            raise StopIteration
    
    def __len__(self):
        return self.num_samples

# 2. 创建自定义数据集
def create_dataset(batch_size=32):
    # 使用自定义生成器创建数据集
    dataset = GeneratorDataset(
        source=RandomDataGenerator(num_samples=1000),
        column_names=["image", "label"],
        shuffle=True
    )
    
    # 添加批处理
    dataset = dataset.batch(batch_size)
    return dataset

# 3. 定义简单CNN网络
class SimpleCNN(nn.Cell):
    def __init__(self, num_classes=10):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3, pad_mode='same', weight_init='he_uniform')
        self.conv2 = nn.Conv2d(16, 32, 3, pad_mode='same', weight_init='he_uniform')
        self.max_pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.flatten = nn.Flatten()
        self.fc = nn.Dense(32*8*8, num_classes, weight_init='he_uniform')
        self.relu = nn.ReLU()
        
    def construct(self, x):
        x = self.conv1(x)
        x = self.relu(x)
        x = self.max_pool(x)
        
        x = self.conv2(x)
        x = self.relu(x)
        x = self.max_pool(x)
        
        x = self.flatten(x)
        x = self.fc(x)
        return x

# 4. 训练过程
def train():
    # 设置运行环境
    ms.set_context(mode=ms.GRAPH_MODE, device_target="CPU")  # 可在CPU上运行
    
    # 创建数据集
    train_dataset = create_dataset(batch_size=32)
    
    # 实例化网络
    net = SimpleCNN()
    
    # 定义损失函数和优化器
    loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
    optimizer = nn.Adam(net.trainable_params(), learning_rate=0.001)
    
    # 创建模型
    model = Model(net, loss_fn, optimizer, metrics={'accuracy'})
    
    # 训练模型
    print("Starting training...")
    model.train(5, train_dataset, callbacks=[LossMonitor()], dataset_sink_mode=False)
    print("Training completed!")

if __name__ == "__main__":
    train()

bbd6afdfffa5b93f4750855e903bb2b0.PNG

复制完毕后,在终端输入python ms_one.py运行文件。

7a210f6c82379ce9192dfacbe20487e1.PNG

MindSpore核心特点详解:

  • 自定义数据集处理

在这个代码示例中,完全避开了对外部数据集的依赖,展示了如何:

1. 使用GeneratorDataset创建自定义数据集;

2. 实现迭代器接口生成随机数据;

3. 完全控制数据生成过程。

关键代码片段:

class RandomDataGenerator:
    def __init__(self, num_samples=1000, image_size=(32, 32), num_classes=10):
        self.num_samples = num_samples
        self.image_size = image_size
        self.num_classes = num_classes
        self.index = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.index < self.num_samples:
            # 生成随机图像数据 (3通道)
            image = np.random.rand(3, *self.image_size).astype(np.float32)
            # 生成随机标签
            label = np.random.randint(0, self.num_classes, dtype=np.int32)
            self.index += 1
            return image, label
        else:
            self.index = 0
            raise StopIteration
    
    def __len__(self):
        return self.num_samples
  • 计算图模式

MindSpore的独特之处在于:

1. GRAPH_MODE:静态图模型,先构建计算图在执行,效率高;

2. PYNATIVE_MODE:动态图模式,类似PyTorch的即时执行;

3. 同一套代码可以切换两种模式。

关键代码片段:

# 4. 训练过程
def train():
    # 设置运行环境
    ms.set_context(mode=ms.GRAPH_MODE, device_target="CPU")  # 可在GPU或NPU上运行
    
    # 创建数据集
    train_dataset = create_dataset(batch_size=32)
    
    # 实例化网络
    net = SimpleCNN()
    
    # 定义损失函数和优化器
    loss_fn = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction='mean')
    optimizer = nn.Adam(net.trainable_params(), learning_rate=0.001)
    
    # 创建模型
    model = Model(net, loss_fn, optimizer, metrics={'accuracy'})
    
    # 训练模型
    print("Starting training...")
    model.train(5, train_dataset, callbacks=[LossMonitor()], dataset_sink_mode=False)
    print("Training completed!")
  • 网络定义方式

MindSpore的nn.Cell类提供了:

1. 类似于PyTorch的模块化网络定义;

2. construct方法替forward;

3. 自动参数初始化选项。

关键代码片段:

# 3. 定义简单CNN网络
class SimpleCNN(nn.Cell):
    def __init__(self, num_classes=10):
        super(SimpleCNN, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3, pad_mode='same', weight_init='he_uniform')
        self.conv2 = nn.Conv2d(16, 32, 3, pad_mode='same', weight_init='he_uniform')
        self.max_pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.flatten = nn.Flatten()
        self.fc = nn.Dense(32*8*8, num_classes, weight_init='he_uniform')
        self.relu = nn.ReLU()
        
    def construct(self, x):
        x = self.conv1(x)
        x = self.relu(x)
        x = self.max_pool(x)
        
        x = self.conv2(x)
        x = self.relu(x)
        x = self.max_pool(x)
        
        x = self.flatten(x)
        x = self.fc(x)
        return x
  • 训练流程抽象

MindSpore的Model类封装:

1. 训练循环;

2. 评估流程;

3. 回调系统。

关键代码片段:

 # 创建模型
    model = Model(net, loss_fn, optimizer, metrics={'accuracy'})
    
    # 训练模型
    print("Starting training...")
    model.train(5, train_dataset, callbacks=[LossMonitor()], dataset_sink_mode=False)
    print("Training completed!")
  • 硬件无关性

通过设置device_target实现:

1. 同一代码可运行在不同硬件上;

2. 自动处理硬件差异;

3. 支持CPU/GPU/NPU。

关键代码片段:

ms.set_context(mode=ms.GRAPH_MODE, device_target="CPU") # 可在GPU或NPU上运行

想了解更多关于MindSpore框架可前往:昇思MindSpore | 全场景AI框架 | 昇思MindSpore社区官网

3.4 总结

以下是PyTorch、TensorFlow、MindSpore三个主流框架的对比表格:

对比维度PyTorchTensorFlowMindSpore
主要接口风格命令式编程(动态图优先)声明式编程(静态图优先)动静统一(自动微分)
计算图模式动态图(Eager)优先静态图(Graph)为主(TF2.x支持动态)动静统一(GRAPH/PNATIVE双模式)
自动微分机制基于tape的自动微分基于计算图的自动微分基于源码转换的自动微分
分布式训练Torch.distributedTf.distribute自动并行(数据/模型/流水线并行)
硬件支持CPU/GPU/TPUCPU/GPU/TPUCPU/GPU/NPU(昇腾芯片深度优化)
可视化工具TensorBoard(第三方)TensorBoard(原生)MindInsight(原生)
典型应用场景学术研究、快速原型开发工业级生产环境全场景AI(云边端协同)
代码示例(定义网络)class Net(nn.Module):class Net(tf.keras.Model):class.Net(nn.Cell):
数据加载DataLoader+DatasetTf.data.DatasetMindspore.dataset(高性能流水线)
主要优势开发调试方便,社区活跃生产环境成熟,生态完善全场景部署,自动并行高效

关键差异详解:

1. 计算图执行方式:

  • PyTorch:默认动态图(及时执行),调试直观;
  • TensorFlow:历史以静态图为主,TF2.x默认启用Eager模式;
  • MindSpore:可自由切换动静模式(set_context(mode=GRAPH/PYNATIVE))。

2. 分布式训练:

  • PyTorch:需手动配置DDP(DistributedDataParallel);
  • TensorFlow:MirroredStrategy等策略需显式声明;
  • MindSpore:提供自动并行(auto_parallel_context)。

3. 硬件适配:

  • MindSpore:对昇腾芯片(Ascend)有深度优化;
  • TensorFlow:对TPU支持最好;
  • PyTorch:在GPU生态最通用。

4.安全特性:

  • MindSpore:内置模型加密、差分隐私等企业级安全功能;
  • TensorFlow:提供隐私计算扩展(TF Privacy);
  • PyTorch:依赖第三方库实现安全功能。

至此,框架大冒险:开发者的奇幻之旅案例结束。

相关推荐

鸿蒙案例上新啦 | 购物、听歌、健身:15个模板带你一键激活社交娱乐

页面层级如何组织、跨页共享状态如何同步、列表与详情及个人中心如何形成稳定闭环。鸿蒙开发实践中心将这些高频消费与互动场景沉淀为可参考的标准模板,提供从业务架构到界面实现的快捷实践入口。更多实战案例欢迎前往鸿蒙开发实践中心案例中心查看并开启云端体验。

华为云官方博客 354

鸿蒙案例上新啦 | 出门打车、到家上课:25个模板带你一屏打通日常生活

如何合理拆分页面组件、如何建立单一可信的状态源、如何让用户在每一步操作中都获得明确反馈。鸿蒙开发实践中心以标准化的应用与元服务模板为入口,将清晰的业务架构与可复用的代码结构直观呈现。不妨立即挑选一个感兴趣的方向进入云端环境,从页面布局、组件封装、状态管理到路由组织,亲手跑通你的鸿蒙实战项目。

华为云官方博客 335

LakeAgent:DWS数据仓库的第二大脑,告别 “翻译式运维”,迈入智能自治时代

和普通 SQL 改写工具不同,LakeAgent 自动做多方案代价对比,主动规避负优化陷阱:补充分区键过滤实现剪枝,扫描分区由 37 收敛至 1,执行代价从 758.28 降至 113.74;未来的数据仓库,将不止能算、能存,更能看懂自己、诊断自己、理解自己。长久以来,数仓的智能都依附于人:信号需要人解读,瓶颈需要人研判,经验困在个体里,无法随底座永续生长。CPU 高、CPU 告警、CPU 诊断、CPU 使用率过高、CPU 满。语法、错误码、计费、性能调优、最佳实践、故障处置等全场景内容。

华为云官方博客 563

如何使用RDS Supabase后端BaaS能力:文件存储(File Storage)

• product-images(公开桶,允许公共读取):策略名称"Public read for product-images",允许SELECT,目标角色anon,策略定义bucket_id = 'product-images'。上传/删除需另配INSERT/DELETE策略,详见SQL。• product-specs(私有桶,仅认证用户访问自己的文件夹):建议拆为上传、读取、删除三条策略,策略定义均为 bucket_id = 'product-specs' 且仅限本人文件夹(详见下文 SQL)。

华为云官方博客 483

如何使用RDS Supabase后端BaaS能力:实时订阅与推送(Realtime)

Realtime 把数据库的每次变更同步到客户端:表里增、删、改一行,订阅者无需刷新页面或主动请求即可秒级收到。三大能力各司其职:• Postgres Changes — 监听表的 INSERT/UPDATE/DELETE,变化即通知• Broadcast — 客户端之间直接互发,适合瞬时通知、协同编辑• Presence — 跟踪频道里“谁在线”典型场景有实时数据展示(订单、库存、监控指标即时刷新)、即时通讯(消息收发、在线名单、“对方正在输入”)、协同编辑与实时通知。

华为云官方博客 473

AI Agent如何通过MCP连接到华为云RDS Supabase应用平台

Schema元数据列出所有可访问的表(按schema分组)。Schema元数据列出表的列及元数据(类型/默认值/约束)。Schema元数据列出所有约束(PK/FK/UNIQUE/CHECK/EXCLUDE)。可按schema/表/类型过滤。Schema元数据列出所有外键关系。可按schema/表过滤。Schema元数据列出所有索引及定义和大小。可按schema/表过滤。Schema元数据列出已应用的数据库迁移记录。Schema元数据列出已安装的PostgreSQL扩展。

华为云官方博客 480

华为大数据Flink让每一 CU 算力,跑出开源 5.74 倍的性能

1. 开源Apache Flink 已成为业界流计算事实标准,但在极端重负载场景下存在性能瓶颈。2. 华为大数据Flink通过多项自研深度优化,在执行计划、算子执行、状态存储三个层面构建协同的优化体系。3. Nexmark Benchmark 测试结果:整体性能提升 5.74 倍,极端重负载场景性能领先最高 18.3 倍。4. 100% 兼容 Apache Flink 1.20,业务代码零改造,无缝迁移。

华为云官方博客 384

LakeAgent实战 | 业务分析篇从一句提问到业务分析

本文以“订单金额变化”分析为例,展示LakeAgent如何通过自然语言提问,结合DataArtsStudio的数据资产与专业技能,帮助业务人员快速定位数据、生成SQL、追踪血缘、生成报告。从问题出发,逐步实现数据发现、变化洞察、原因追溯与团队协作,最终形成可复用的分析流程与企业规则,显著提升数据分析效率与一致性。

华为云官方博客 394

华为云RDS Supabase AI应用已开放公测 :30分钟搭建AI应用后端

认证、存储、实时推送、数据库API——4个后端模块,传统开发需要数周。今天,你只需要30分钟。AI创业公司的全栈开发工程师。上周老板说"下周要上线的AI对话应用,后端你来搞"——认证鉴权、数据库接口、文件存储、实时推送,每一个模块都需要数周搭建,而市场不会等你。小张打开华为云RDS Supabase,30分钟搭好认证、数据库API、对象存储,剩下的时间全用来打磨AI交互体验。基于开源Supabase+华为云RDS PostgreSQL全托管能力,为开发者提供。

华为云官方博客 402

如何使用RDS Supabase后端BaaS能力:数据库函数(Database Function)

上一篇介绍了 Database Data API——建表即自动生成增删改查接口,解决单表读写,但聚合统计、跨表事务、字段自动维护等逻辑已超出其能力边界。本篇推进到数据库函数(Database Function):把业务逻辑封装进数据库,前端通过 .rpc() 调用,由触发器自动响应数据变更。上一篇中,小张基于 Data API 完成了产品目录的建表与基础读写。但新需求随之而来:按分类统计产品数与价格区间、上架新品同时写产品表与定价表、产品修改后自动刷新更新时间。

华为云官方博客 467

如何使用RDS Supabase后端BaaS能力:创表即生成API(Database Data API)

认证、存储、实时推送、数据库API——4个后端模块,传统开发要数周。本系列逐个拆解,首篇聚焦数据库API(Database Data API):建表即得 API,无需手写后端。小张,AI创业公司的全栈工程师。老板让他做个产品目录页,展示产品与价格、支持上下架。传统做法要搭后端、写接口、配权限,工期少说1-2周;而在华为云RDS Supabase,建两张表、应用 SDK 直连,几分钟增删改查全跑通。

华为云官方博客 483

从一句话到一个能出去的链接,AI开发者空间做了什么

自行搭建的 Agent、正在使用的开源项目、团队既有的工具,都可以接入,可以通过AI创建或者手动搭建环境;华为云 AI开发者空间——面向开发者的云端一站式开发平台,做的就是把这段路接上:环境免安装,浏览器打开即为完整的 Linux 运行环境,预置的 AI 智能体开箱即用。第一个任务建议选能出结果的:做一个游戏、生成一个页面、创建一台实例,从需求走到可访问的链接,一次就能看清这个环境在做什么。沙箱是一个完整的 Linux 环境,依赖、服务、端口都是真实的,不是模拟。环境释放后,权限随之失效。

华为云官方博客 430

华为云码道配置自定义大模型,四种方式完整实操

案例介绍。

华为云官方博客 633

图数据库:实现穿透式监管的数据基座

穿透式监管标志着国企监管从“管企业”向“管资本”转型过程中的关键一跃。而图数据库正是这一跃的技术支点。从股权穿透到资金链穿透,从供应链穿透到数据穿透,华为GES图数据库正在将“穿透式监管”从理念变为可落地、可操作的实践。无论是天眼查式的全量链路查询,还是某集团财经的税务规则判断,抑或是芯片供应链式的部件风险分析,乃至通过Palantir构建决策知识图谱,其底层逻辑都是一致的——用图的力量,穿透一切形式的“隔离层”,直抵风险本质与责任核心。

华为云官方博客 668

《公共云三十问》正式收官,奔赴企业AI百场景新征程

今年6月底,公共云产业联盟重点推出《公共云三十问》专栏,以每周三问的节奏,连载十周,解读《先进公共云》白皮书,分享国计民生系列案例,旨在凝聚共识、推动落地实践。同时,专栏分析公共云在产业升级、民生福祉、科技创新、全球发展等方面的作用,梳理中国特色公共云发展路径:以普惠云拓展用云广度,以智算云提升用云深度,以自主云夯实用云厚度,以全球云打开用云跨度。这十问从专属云、行业云切入,深入政务、金融、交通、电力、钢铁、化工、油气、制造等国计民生场景,回答公共云“怎么用”。

华为云官方博客 474

开发者小技巧|IAM配置,让码道代码智能体连续30天免登录

案例介绍。

华为云官方博客 648

码道深度对接CodeArts,让需求自动落地为代码

案例介绍。

华为云官方博客 722

【公共云三十问 之三十】拥抱AI,企业如何建设面向智能体的专属云?

企业可分阶段建设覆盖开发、运行、运营及安全的一体化智能体平台——从构建一站式、高低码协同的智能体开发平台,到打造高性能、极致弹性的运行时环境,再到搭建AgentOps驱动的持续运营与运维体系,同时构建端到端、多层次的全链路安全防护体系。在数据湖建设方面,遵循“存量复用、平滑演进、AI导向、分步迭代”原则,分三阶段推进——打造AI多模数据湖核心能力、完成存算分离与统一元数据管理、实现闭环赋能全面支撑智能体规模化落地,在保护既有投资的前提下将传统数据平台转型为AI数据专属供给平台。

华为云官方博客 824

【公共云三十问 之二十九】国计民生之制造:制造云如何重塑数智时代的新质生产力?

平台打通软件交付的完整路径,覆盖需求管理、代码托管、代码检查、编译构建、制品仓库、部署、测试等关键环节,支持大模型能力融入研发全流程,实现从需求到交付的端到端管理。通过构建“研发一朵云”,方案打破地域与组织壁垒,实现跨团队协同开发,有效缩短软件交付周期,助力工业制造企业从“传统研发”走向“敏捷研发”,加速数智化转型进程。当制造云真正成为数据流通的平台、AI创新的底座,公共云的社会价值将从基础设施层向生产场景层持续延伸,为新型工业化建设和制造强国战略注入源源不断的动力,重塑数智时代的中国制造新质生产力。

华为云官方博客 791

告别重复手工迁仓,码道MCP+Skill实现仓库批量迁移

案例介绍。

华为云官方博客 791

【公共云三十问 之二十八】国计民生之油气:智算云如何叩响数智时代的“地心蓝金”?

西南油气田以“向地球深部要资源”为战略方向,联合以华为云Stack为代表的公共云服务商共同打造统一算力底座,建设西南区域数据湖与通用技术平台,构建“勘探开发工程技术、天然气生产过程管控、天然气产运储销”等三个一体化协同应用场景,支撑油气勘探、开发生产、管输储运等全业务链的数智化转型。当智算云真正成为数据流通的平台、AI创新的底座,油气田得以将算力效能、数据价值与智能技术深度融入勘探开发全链条,将“看不见的算力”转化为“摸得着的储量”,以智能化手段持续降低勘探风险、缩短发现周期、提高采收效率,确保生产安全。

华为云官方博客 613

【公共云三十问 之二十七】国计民生之化工:数智云如何重塑传统化工新范式?

在架构方面,方案构建云边协同的统一体系,涵盖AI协同、数据协同与运营协同三大维度——总部集中训练大模型,边缘节点负责推理执行,云边持续迭代,实现“边用边学”的智能闭环,模型平均精度提升20%以上。此外,方案提供一站式企业级工业物联网平台、数据湖与数据治理平台,覆盖工业数据分析“采、存、算、管、用”全流程,打通生产现场与管理系统间的数据壁垒,有效消除数据孤岛。层面,方案充分发挥软硬协同优势,实现计算、存储、网络与云平台的深度协同,训练线性度超95%,为大模型训练推理提供强劲算力支撑。▲化工“数智”新模式。

华为云官方博客 664

【公共云三十问 之二十六】国计民生之钢铁:数智云如何淬炼中国钢铁新力量?

同时,构建云边端协同的统一架构,支撑集团总部与各生产基地两级协同发展——总部集中训练大模型,边缘节点负责推理执行,云边持续迭代,实现训推一体化的资源调度与高效协同,为钢铁行业的数智化转型构建了坚实的算力底座。层面,方案构建覆盖“工业数采→边缘IT/OT融合→统一数据湖→数据治理平台→数据应用”全链路的一站式数据治理与流通平台,打通生产现场与管理系统间的数据壁垒,让数据“采得到、流得动、用得好”,加速数据价值从生产现场向经营决策层流动释放。湘潭钢铁集团的钢铁数智云,是钢铁工业智能云建设的标杆案例。

华为云官方博客 526

LakeWatch——MRS 智能运维Agent

从资源池、队列、作业等多个维度,对集群CPU与内存资源进行精细化分析与对比,直观呈现不同时间段的空闲、满载等使用状态,识别资源浪费,指导治理优化,为扩缩容决策提供数据支撑。对HDFS存储进行多维度深度分析(目录、用户、用户组等),涵盖使用量、增量、文件大小分布及数据热度等指标,帮助快速识别增长较快的目录、长期未访问的文件,统计目录文件数量与小文件占比,评估HDFS总存储量与扩缩容需求,为存储治理与资源规划提供全面数据支撑。Agent主动巡检,识别异常趋势并提前预警,让运维从"事后处理"转向"事前预防"。

华为云官方博客 515

华为云专题文档发布:丰富的AI案例、选型指导和概念解读

发布 “云服务选型”、“云计算概念”专题,提供云服务选型指导,助您选择匹配业务的云服务,解读云计算相关概念,开启云上学习之路。开发者工具和文档专区上线,提供从学习、实践到反馈的全链路支持。帮助中心新增100余篇AI案例。

华为云官方博客 286

一个人,也能用AI做点“星东西”

华为云星耀创想者大赛-2026华为云OPC创意大赛等你来~

华为云官方博客 291

从需求到可执行工作项:MCP+Skill 让智能体规划真正落地

回顾整个体验,以前让智能体帮我拆需求,它是洋洋洒洒给我列了一大篇 Markdown,看着挺像那么回事,但最后还是得我一条条往 CodeArts Req 里搬,搬完再手动挂父子关系、排日期,拆需求五分钟,搬运两小时。现在好了,MCP 给智能体接上了"手",Skill 给它装上了"项目经理的脑子",一句话下去,34 个工作项连带排期、层级关系全给我建好了,甘特图一拉,齐刷刷都在两周内,节省了多少工作量啊,美滋滋。本次实操在码道代码智能体基础上,构建了一套"需求→可执行工作项"的自动化规划方案。

华为云官方博客 576

华为云码道「码力续航计划」更新!

✅上新GLM‑5.3‑Flash,高速响应,代码生成、工程解析、Agent调试高效输出。新增GLM‑5.3‑Flash福利模型,每日解锁1000万免费Tokens。● 本次活动共发放总量价值100万元Tokens,发完即止!把耗算力的编码重活,交给华为云码道代码智能体🚀🚀。● 每日额度准时刷新,当日清零、次日满血重置。✅复杂算法、大项目解析、批量代码生成随便跑。✅不用抠额度、不用算消耗,放开调试大胆迭代。✅无需额外操作,登录即送,直接切换模型使用。● 把算力交给码道,让撸码不再内耗👏🏻。

华为云官方博客 688

【公共云三十问 之二十四】国计民生之交通:交通云如何铺就数智通衢新坦途?

交通行业作为支撑实体经济的关键基础设施,涵盖公路、铁路、机场、港口、地铁等众多子领域,其中,公路网络作为综合交通运输体系的基础骨架,承担着全国超过70%的客货运量,其数字化、智能化转型的需求尤为迫切。方面,提供Agent开发框架、知识库管理、RAG工程、意图识别、静态应用编排及模型评测等能力,支持客户将行业知识、业务流程与AI能力深度融合,快速构建面向收费稽核、路网调度、应急处置等场景的智能应用。开发并实现落地应用,全面覆盖建设、管理、养护、运营、服务、安全、办公七大业务领域。

华为云官方博客 464

【公共云三十问 之二十五】国计民生之电力:电力云如何点亮数智电力新引擎?

方案构建了覆盖数据获取、质量评估到标准化处理的全链路能力。基于公共云服务商智算底座及气象大模型,通过时空图神经网络重新建模产流机制,中国华电建成超50TB多源融合数据集,突破时空建模与机理融合等五大关键技术,短期径流预测精度较传统机理模型提升5个百分点以上,实现15天中期径流预测精度超85%,推理效率达秒级。基于气象大模型的基础架构与预训练能力,客户可直接在大模型之上开展增量训练与微调,充分利用场站所在区域的高精度历史数据(如3公里、1公里分辨率),针对不同场站和区域的地形地貌与气候特征进行模型调优。

华为云官方博客 381
上一篇: 仓颉之并发编程的速度激情
下一篇: 仓颉之反射和注解的神秘力量
华为云开发者联盟
华为云开发者联盟 企业官方账号 企业官方账号
博客等级 码龄10年 72万+粉丝 5985原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值