-
TensorFlow 张量操作基础张量是TensorFlow中的核心数据结构,可以理解为多维数组。张量的秩表示其维度数量,例如标量是0维张量,向量是1维张量,矩阵是2维张量。12345678910import tensorflow as tf # 创建标量scalar = tf.constant(5)# 创建向量vector = tf.constant([1, 2, 3])# 创建矩阵matrix = tf.constant([[1, 2], [3, 4]])# 创建3维张量tensor = tf.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])张量创建方法TensorFlow提供了多种创建张量的方式,包括从Python列表、Numpy数组创建,以及生成特定模式的张量。12345678910111213141516171819# 从Python列表创建tensor_from_list = tf.convert_to_tensor([1, 2, 3]) # 从Numpy数组创建import numpy as nparray = np.array([[1, 2], [3, 4]])tensor_from_np = tf.convert_to_tensor(array) # 生成全零张量zeros = tf.zeros([2, 3]) # 生成全一张量ones = tf.ones([3, 2]) # 生成随机正态分布张量randn = tf.random.normal([2, 2], mean=0.0, stddev=1.0) # 生成均匀分布张量randu = tf.random.uniform([3, 3], minval=0, maxval=1)张量数学运算张量支持各种数学运算,包括逐元素运算和矩阵运算。12345678910111213141516171819202122a = tf.constant([[1, 2], [3, 4]])b = tf.constant([[5, 6], [7, 8]]) # 逐元素加法add = tf.add(a, b) # 逐元素乘法mul = tf.multiply(a, b) # 矩阵乘法matmul = tf.matmul(a, b) # 张量求和sum_all = tf.reduce_sum(a)sum_axis0 = tf.reduce_sum(a, axis=0)sum_axis1 = tf.reduce_sum(a, axis=1) # 张量平均值mean = tf.reduce_mean(a) # 张量最大值max_val = tf.reduce_max(a)张量形状操作改变张量形状是常见的操作,TensorFlow提供了多种形状操作方法。12345678910111213141516tensor = tf.constant([[1, 2], [3, 4], [5, 6]]) # 获取张量形状shape = tensor.shape # 改变张量形状reshaped = tf.reshape(tensor, [2, 3]) # 转置张量transposed = tf.transpose(tensor) # 扩展维度expanded = tf.expand_dims(tensor, axis=0) # 压缩维度squeezed = tf.squeeze(expanded)张量索引和切片TensorFlow支持类似Numpy的索引和切片操作。12345678910111213tensor = tf.constant([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 获取单个元素elem = tensor[1, 2] # 获取第2行第3列的元素 # 获取行切片row_slice = tensor[1:, :] # 获取第2行及以后的所有行 # 获取列切片col_slice = tensor[:, 1] # 获取第2列 # 使用步长切片strided_slice = tensor[::2, ::2] # 每隔2个元素取一个张量广播机制TensorFlow支持广播机制,允许不同形状的张量进行运算。12345a = tf.constant([[1, 2, 3]]) # 形状(1,3)b = tf.constant([[4], [5], [6]]) # 形状(3,1) # 广播加法c = a + b # 结果形状(3,3)张量聚合操作TensorFlow提供了多种聚合操作函数。12345678910111213tensor = tf.constant([[1, 2, 3], [4, 5, 6]]) # 沿轴0求和sum0 = tf.reduce_sum(tensor, axis=0) # [5,7,9] # 沿轴1求最大值max1 = tf.reduce_max(tensor, axis=1) # [3,6] # 计算逻辑与logical = tf.reduce_all(tensor > 3) # False # 计算均值mean = tf.reduce_mean(tensor) # 3.5张量拼接与分割TensorFlow支持张量的拼接和分割操作。123456789101112a = tf.constant([[1, 2], [3, 4]])b = tf.constant([[5, 6], [7, 8]]) # 沿轴0拼接concat0 = tf.concat([a, b], axis=0) # 沿轴1拼接concat1 = tf.concat([a, b], axis=1) # 张量分割split0 = tf.split(a, num_or_size_splits=2, axis=0)split1 = tf.split(a, num_or_size_splits=[1, 1], axis=1)张量排序操作TensorFlow提供了排序和top-k操作。12345678910tensor = tf.constant([[3, 1, 4], [1, 5, 9]]) # 排序sorted_values, sorted_indices = tf.sort(tensor, direction='DESCENDING') # argsortargsort = tf.argsort(tensor) # top-ktop_k_values, top_k_indices = tf.math.top_k(tensor, k=2)张量高级操作TensorFlow还提供了一些高级张量操作。1234567891011# 张量收集tensor = tf.constant([[0, 1, 2], [3, 4, 5]])indices = tf.constant([0, 1])gathered = tf.gather(tensor, indices) # 收集第0行和第1行 # 张量分散updates = tf.constant([10, 20])scattered = tf.tensor_scatter_nd_update(tensor, [[0, 0], [1, 1]], updates) # 张量条件操作cond = tf.where(tensor > 3, tensor, tf.zeros_like(tensor)) # 大于3保留原值,否则设为0张量梯度计算TensorFlow支持自动微分,可以计算张量操作的梯度。1234x = tf.Variable(3.0)with tf.GradientTape() as tape: y = x ** 2 + 2 * x + 1dy_dx = tape.gradient(y, x) # 2x + 2 = 8 张量与Numpy互操作TensorFlow张量和Numpy数组可以方便地相互转换。123456# 张量转Numpy数组tensor = tf.constant([[1, 2], [3, 4]])numpy_array = tensor.numpy() # Numpy数组转张量new_tensor = tf.convert_to_tensor(numpy_array)
-
非常荣幸参加此次HCCDE 云架构的培训学习,E级的云架构的知识点比P提升了很多,如果说IE是重视理论知识,对华为云产品,最佳实践有个深入的了解的话,那么E覆盖的知识点从需求对接,开发前中后的注意事项,敏捷的流程,华为云高阶服务(CCE,CCI,EI,EG,FG,ROMA,CSE等),由浅入深,让学员学习到比IE更完整,更立体的知识体系,同时注重实操,利用RFS自动化购买云服务,搭建集群,考核了学员对json,对华为云各个产品考核的很深,需要同时注意微观的产品细节,宏观的架构及安全,掌握后,对目前正在交付的项目有非常大的帮助
-
介绍TensorFlow是一个开源的机器学习框架,是由Google开发的,用于构建和训练机器学习模型的工具库。它提供了丰富的功能和易于使用的接口,可用于各种机器学习任务,如图像识别、自然语言处理、推荐系统等。TensorFlow的基本概念包括:Tensor:是TensorFlow中的基本数据结构,可以理解为多维数组。它可以是一个标量(0维)、向量(1维)、矩阵(2维)或更高维的数组。计算图:TensorFlow使用计算图来描述计算过程,即将操作和数据组成的节点连接起来形成一个有向无环图。计算图定义了操作的顺序和依赖关系。变量:变量是在模型训练过程中需要被优化的参数。在TensorFlow中,通过tf.Variable()来定义变量。模型:模型是机器学习任务的核心部分,它由一系列操作和变量组成。在TensorFlow中,我们可以通过定义计算图来创建模型。一、TF使用场景TensorFlow的使用场景非常丰富,适用于各种机器学习任务。以下是一些常见的使用场景:图像识别:TensorFlow提供了一些预训练好的模型,如Inception、ResNet等,可以用于图像分类、目标检测和图像生成等任务。自然语言处理:TensorFlow提供了一些预训练好的模型,如BERT、GPT等,可以用于文本分类、情感分析和机器翻译等任务。推荐系统:TensorFlow可以用于构建推荐系统,通过分析用户的历史行为来预测用户可能喜欢的物品。强化学习:TensorFlow提供了一些强化学习的工具和算法,可以用于训练智能体从环境中学习并做出决策。二、与PyTorch对比TensorFlow和PyTorch是两个流行的深度学习框架。它们在设计哲学、编程模型和部分功能方面有一些差异。设计哲学:TensorFlow:TensorFlow是一个符号式编程框架,它使用静态计算图来定义和运行计算。用户首先定义计算图,然后在会话中执行计算。这种设计可以优化计算图,并提供高度的可移植性和分布式计算支持。PyTorch:PyTorch是一个动态图框架,它使用动态计算图来定义和运行计算。用户可以按照需要随时修改计算图,这使得调试和编写代码更加直观和灵活。编程模型:TensorFlow:TensorFlow使用基于声明式编程的API。用户需要显式地定义计算图,并通过会话执行计算,可以在训练和推理阶段使用不同的会话配置。PyTorch:PyTorch使用一种类似于Python的命令式编程风格,让用户可以直观地编写代码,调试和测试模型更加方便。用户可以直接在Python中使用标准的控制流程和变量操作。功能和生态系统:TensorFlow:TensorFlow具有较为完整的生态系统,提供了许多高级功能和工具,如TensorBoard可视化、分布式训练、模型部署等。它还有一个丰富的模型仓库(TensorFlow Hub)和模型优化工具(TensorFlow Lite)。PyTorch:PyTorch相对于TensorFlow而言功能相对简单,它更注重提供灵活性和易用性。PyTorch的生态系统也在不断扩大,但相对TensorFlow而言较为小众。TensorFlow在分布式训练和生产环境部署方面具有优势,适用于大规模的深度学习应用;而PyTorch在研究和实验中更受欢迎,更灵活易用。在选择使用哪个框架时,可以考虑项目需求和个人喜好。三、示例TensorFlow是一个用于机器学习和深度学习的开源框架,下面是TensorFlow的安装和使用教程:安装TensorFlow1)在Python环境中安装TensorFlow前,先确保已安装了Python和pip包管理工具。2)打开终端或命令提示符,运行以下命令安装TensorFlow:pip install tensorflow3)如果你使用的是GPU版本的TensorFlow,可以运行以下命令安装:pip install tensorflow-gpu导入TensorFlow 在Python脚本中,可以使用以下语句导入TensorFlow:import tensorflow as tf使用TensorFlow1)定义计算图 TensorFlow使用计算图来表示计算过程,首先需要定义一个计算图。例如,下面的代码定义了一个简单的计算图来加法运算:import tensorflow as tf # 定义计算图 a = tf.constant(2) b = tf.constant(3) c = tf.add(a, b)2)运行计算图 在TensorFlow中,需要创建一个会话(Session)来运行计算图。会话负责分配资源和执行计算。import tensorflow as tf # 定义计算图 a = tf.constant(2) b = tf.constant(3) c = tf.add(a, b) # 创建会话并运行计算图 with tf.Session() as sess: result = sess.run(c) print(result)3)TensorFlow中的变量和占位符 变量(Variable)用于存储模型的参数,占位符(Placeholder)用于接收外部输入数据。例如,下面的代码定义了一个变量和一个占位符:import tensorflow as tf # 定义变量和占位符 W = tf.Variable(tf.random_normal([2, 3])) X = tf.placeholder(tf.float32, [None, 2]) # 运行计算图 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) result = sess.run(W, feed_dict={X: [[1, 2], [3, 4]]}) print(result)4)TensorFlow中的模型训练 TensorFlow提供了各种优化算法和损失函数来训练模型。例如,下面的代码定义了一个简单的线性回归模型,并使用梯度下降算法进行训练:import tensorflow as tf # 定义模型 X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32) W = tf.Variable(tf.random_normal([1])) b = tf.Variable(tf.random_normal([1])) pred = tf.add(tf.multiply(X, W), b) # 定义损失函数和优化算法 loss = tf.reduce_mean(tf.square(pred - Y)) optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss) # 训练模型 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(100): _, l = sess.run([optimizer, loss], feed_dict={X: [1, 2, 3, 4], Y: [2, 4, 6, 8]}) print(f'Epoch {epoch + 1}: loss = {l}') # 使用训练好的模型进行预测 result = sess.run(pred, feed_dict={X: [5, 6, 7, 8]}) print(result)
-
介绍TensorFlow是一个开源的机器学习框架,是由Google开发的,用于构建和训练机器学习模型的工具库。它提供了丰富的功能和易于使用的接口,可用于各种机器学习任务,如图像识别、自然语言处理、推荐系统等。TensorFlow的基本概念包括:Tensor:是TensorFlow中的基本数据结构,可以理解为多维数组。它可以是一个标量(0维)、向量(1维)、矩阵(2维)或更高维的数组。计算图:TensorFlow使用计算图来描述计算过程,即将操作和数据组成的节点连接起来形成一个有向无环图。计算图定义了操作的顺序和依赖关系。变量:变量是在模型训练过程中需要被优化的参数。在TensorFlow中,通过tf.Variable()来定义变量。模型:模型是机器学习任务的核心部分,它由一系列操作和变量组成。在TensorFlow中,我们可以通过定义计算图来创建模型。一、TF使用场景TensorFlow的使用场景非常丰富,适用于各种机器学习任务。以下是一些常见的使用场景:图像识别:TensorFlow提供了一些预训练好的模型,如Inception、ResNet等,可以用于图像分类、目标检测和图像生成等任务。自然语言处理:TensorFlow提供了一些预训练好的模型,如BERT、GPT等,可以用于文本分类、情感分析和机器翻译等任务。推荐系统:TensorFlow可以用于构建推荐系统,通过分析用户的历史行为来预测用户可能喜欢的物品。强化学习:TensorFlow提供了一些强化学习的工具和算法,可以用于训练智能体从环境中学习并做出决策。二、与PyTorch对比TensorFlow和PyTorch是两个流行的深度学习框架。它们在设计哲学、编程模型和部分功能方面有一些差异。设计哲学:TensorFlow:TensorFlow是一个符号式编程框架,它使用静态计算图来定义和运行计算。用户首先定义计算图,然后在会话中执行计算。这种设计可以优化计算图,并提供高度的可移植性和分布式计算支持。PyTorch:PyTorch是一个动态图框架,它使用动态计算图来定义和运行计算。用户可以按照需要随时修改计算图,这使得调试和编写代码更加直观和灵活。编程模型:TensorFlow:TensorFlow使用基于声明式编程的API。用户需要显式地定义计算图,并通过会话执行计算,可以在训练和推理阶段使用不同的会话配置。PyTorch:PyTorch使用一种类似于Python的命令式编程风格,让用户可以直观地编写代码,调试和测试模型更加方便。用户可以直接在Python中使用标准的控制流程和变量操作。功能和生态系统:TensorFlow:TensorFlow具有较为完整的生态系统,提供了许多高级功能和工具,如TensorBoard可视化、分布式训练、模型部署等。它还有一个丰富的模型仓库(TensorFlow Hub)和模型优化工具(TensorFlow Lite)。PyTorch:PyTorch相对于TensorFlow而言功能相对简单,它更注重提供灵活性和易用性。PyTorch的生态系统也在不断扩大,但相对TensorFlow而言较为小众。TensorFlow在分布式训练和生产环境部署方面具有优势,适用于大规模的深度学习应用;而PyTorch在研究和实验中更受欢迎,更灵活易用。在选择使用哪个框架时,可以考虑项目需求和个人喜好。三、示例TensorFlow是一个用于机器学习和深度学习的开源框架,下面是TensorFlow的安装和使用教程:安装TensorFlow1)在Python环境中安装TensorFlow前,先确保已安装了Python和pip包管理工具。2)打开终端或命令提示符,运行以下命令安装TensorFlow:pip install tensorflow3)如果你使用的是GPU版本的TensorFlow,可以运行以下命令安装:pip install tensorflow-gpu导入TensorFlow 在Python脚本中,可以使用以下语句导入TensorFlow:import tensorflow as tf使用TensorFlow1)定义计算图 TensorFlow使用计算图来表示计算过程,首先需要定义一个计算图。例如,下面的代码定义了一个简单的计算图来加法运算:import tensorflow as tf # 定义计算图 a = tf.constant(2) b = tf.constant(3) c = tf.add(a, b)2)运行计算图 在TensorFlow中,需要创建一个会话(Session)来运行计算图。会话负责分配资源和执行计算。import tensorflow as tf # 定义计算图 a = tf.constant(2) b = tf.constant(3) c = tf.add(a, b) # 创建会话并运行计算图 with tf.Session() as sess: result = sess.run(c) print(result)3)TensorFlow中的变量和占位符 变量(Variable)用于存储模型的参数,占位符(Placeholder)用于接收外部输入数据。例如,下面的代码定义了一个变量和一个占位符:import tensorflow as tf # 定义变量和占位符 W = tf.Variable(tf.random_normal([2, 3])) X = tf.placeholder(tf.float32, [None, 2]) # 运行计算图 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) result = sess.run(W, feed_dict={X: [[1, 2], [3, 4]]}) print(result)4)TensorFlow中的模型训练 TensorFlow提供了各种优化算法和损失函数来训练模型。例如,下面的代码定义了一个简单的线性回归模型,并使用梯度下降算法进行训练:import tensorflow as tf # 定义模型 X = tf.placeholder(tf.float32) Y = tf.placeholder(tf.float32) W = tf.Variable(tf.random_normal([1])) b = tf.Variable(tf.random_normal([1])) pred = tf.add(tf.multiply(X, W), b) # 定义损失函数和优化算法 loss = tf.reduce_mean(tf.square(pred - Y)) optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss) # 训练模型 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for epoch in range(100): _, l = sess.run([optimizer, loss], feed_dict={X: [1, 2, 3, 4], Y: [2, 4, 6, 8]}) print(f'Epoch {epoch + 1}: loss = {l}') # 使用训练好的模型进行预测 result = sess.run(pred, feed_dict={X: [5, 6, 7, 8]}) print(result)
-
Generator的使用:直接读取图像数据:train_generator=ImageDataGenerator(rescale=1./255)test_generator=ImageDataGenerator(rescale=1./255)train_data=train_generator.flow_from_directory( "./cats_and_dogs_filtered/train",batch_size=20,target_size=(64,64),shuffle=True,class_mode='binary')test_data=test_generator.flow_from_directory( "./cats_and_dogs_filtered/validation",batch_size=1000,target_size=(64,64),shuffle=False,class_mode='binary')创建模型:model=tf.keras.models.Sequential([ tf.keras.layers.Conv2D(64,3,activation='relu',input_shape=(64,64,3)), tf.keras.layers.MaxPooling2D(3,3), tf.keras.layers.Conv2D(128,3,activation='relu'), tf.keras.layers.MaxPooling2D(3,3), tf.keras.layers.Flatten(), tf.keras.layers.Dense(512,activation='relu',kernel_initializer='random_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01)), tf.keras.layers.Dense(256,activation='relu',kernel_initializer='random_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01)), tf.keras.layers.Dense(1,activation='sigmoid',kernel_initializer='random_normal',kernel_regularizer=tf.keras.regularizers.l2(0.01))])model.summary()model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-5), loss=tf.keras.losses.BinaryCrossentropy(), metrics=["Accuracy"])model.fit_generator(train_data,steps_per_epoch=100,epochs=200,validation_data=test_data,validation_steps=1,)读取mnist数据:x_test , y_test = loadlocal_mnist( images_path='D:\\Python\\MNIST_data\\t10k-images.idx3-ubyte', labels_path='D:\\Python\\MNIST_data\\t10k-labels.idx1-ubyte')x_train, y_train = loadlocal_mnist( images_path='D:\\Python\\MNIST_data\\train-images.idx3-ubyte', labels_path='D:\\Python\\MNIST_data\\train-labels.idx1-ubyte')
-
按照流程装了运行环境,报错如图
-
我下载了社区版的x86_64的安装包,但不知道如何安装。我用的是windows系统,没有什么命令行代码经验。谢谢各位!
-
例如a = Tensor([1]),想让b = 1,也就是取到只有一个元素的Tensor变量中的那个值,并以单独的数字的形式输出,请问在tik方式开发自定义算子中如何通过函数实现?Pytorch中可以通过a.item()取得,但tik中似乎没有item()函数。
-
MindStudio版本: MindStudio 5.0.RC2安装环境: Win10 / LinuxCANN版本:CANN 5.1.RC2
-
《AutoTune自动调优》教程链接如下https://www.hiascend.com/document/detail/zh/canncommercial/51RC2/modeldev/tfmigr1/tfmigr_mprtg_0031.html文档中写的是通过优化算子调度,来提高性能,实操后发现,性能提升有限,但是精度提升较大。未开启 batch 1100 | examples/s: 25.52 | loss: 1.13622 | time elapsed: 0.15h | time left: 24.25h开 启 batch 1100 | examples/s: 30.52 | loss: 1.13622 | time elapsed: 0.15h | time left: 24.25h但是精度提升较大。疑问点:1、华为昇腾的《AutoTune自动调优》也是基于TVM的Auto Tune吗?2、Auto Tune的优化,会一定程度上优化精度吗?
-
[问题求助] 导入npu_device报错undefined symbol: _ZNK10tensorflow8OpKernel11TraceStringERKNS_15OpKernelContextEb尝试构建支持tensorflow 2.6.5版本的Docker镜像,构建成功,且导入tensorflow正常,但导入npu_device时报错undefined symbol: _ZNK10tensorflow8OpKernel11TraceStringERKNS_15OpKernelContextEb感觉像是版本不匹配的问题,但是排查正常toolkit版本 5.1.RC2nnae版本 5.1.RC2Dockerfile文件:FROM ubuntu:18.04ARG HOST_ASCEND_BASE=/usr/local/AscendARG NNAE_PATH=/usr/local/Ascend/nnae/latestARG INSTALL_ASCEND_PKGS_SH=install_ascend_pkgs.shWORKDIR /tmp# 更新软件源RUN apt update && \ apt install -y --no-install-recommends ca-certificates wget && \ cp -a /etc/apt/sources.list /etc/apt/sources.list.bak && \ wget --no-check-certificate -O /etc/apt/sources.list https://repo.huaweicloud.com/repository/conf/Ubuntu-Ports-bionic.list && \ apt update && \ apt upgrade -y# 安装软件包RUN apt install -y --no-install-recommends autoconf automake dos2unix g++ libbz2-dev libssl-dev libtool libxml2 make pciutils unzip vim wget xz-utils zip \ bzip2 libblas3 libffi-dev libfreetype6-dev libgl1-mesa-glx liblapack3 liblzma-dev libopenblas-dev libpng-dev numactl pkg-config zlib1g zlib1g-dev \ ca-certificates curl cython3 gcc gfortran htop less libblas-dev libgmpxx4ldbl libhdf5-dev libicu60 libxml2-dev libxslt-dev openssl python3-h5py sudo swig \ gcc git htop inetutils-ping openssh-server ssh tmux \ build-essential openjdk-11-jdk zip unzip && \ apt clean && \ rm -rf /var/lib/apt/lists/*ENV LD_LIBRARY_PATH=/usr/local/gcc7.3.0/lib64:${LD_LIBRARY_PATH}# 安装cmakeCOPY cmake-3.15.7.tar.gz ./RUN tar -zxf cmake-3.15.7.tar.gz && \ cd cmake-3.15.7 && \ ./bootstrap && \ make -j 96 && \ make install && \ ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake # 安装python和pipCOPY Python-3.7.5.tar.xz ./RUN tar -xf Python-3.7.5.tar.xz && \ cd Python-3.7.5 && \ ./configure --prefix=/usr/local/python3.7.5 --enable-shared && \ make -j 96 && \ make install && \ ln -sf /usr/local/python3.7.5/bin/python3 /usr/bin/python && \ ln -sf /usr/local/python3.7.5/bin/python3 /usr/bin/python3 && \ ln -sf /usr/local/python3.7.5/bin/python3 /usr/local/bin/python && \ ln -sf /usr/local/python3.7.5/bin/python3 /usr/local/bin/python3 && \ ln -sf /usr/local/python3.7.5/bin/pip3 /usr/bin/pip && \ ln -sf /usr/local/python3.7.5/bin/pip3 /usr/bin/pip3 && \ cd .. && \ rm -rf Python*ENV LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATHENV PATH=/usr/local/python3.7.5/bin:$PATH # 配置python pip源RUN mkdir -p ~/.pip && \ echo '[global]\n\ index-url = https://repo.huaweicloud.com/repository/pypi/simple/\n\ trusted-host = repo.huaweicloud.com\n\ timeout = 120' >> ~/.pip/pip.conf# HwHiAiUser, hwMindXRUN useradd -d /home/hwMindX -u 9000 -m -s /bin/bash hwMindX && \ useradd -d /home/HwHiAiUser -u 1000 -m -s /bin/bash HwHiAiUser && \ usermod -a -G HwHiAiUser hwMindX# 安装python包RUN pip3 install -U pip && \ pip3 install wheel && \ pip3 install setuptools&& \ pip3 install matplotlib && \ pip3 install opencv-python && \ pip3 install sklearn && \ pip3 install pandas && \ pip3 install pycocotools && \ pip3 install tables && \ pip3 install mmcv && \ pip3 install lxml && \ pip3 install easydict && \ pip3 install jupyter && \ pip3 install jupyterlab && \ pip3 install backports.lzma && \ pip3 install keras-preprocessing && \ pip3 install six && \ rm -rf /root/.cache/pip# 拷贝相关文件COPY . ./# Ascend包RUN bash $INSTALL_ASCEND_PKGS_SH# 环境变量ENV GLOG_v=2ENV TBE_IMPL_PATH=$NNAE_PATH/opp/op_impl/built-in/ai_core/tbeENV FWK_PYTHON_PATH=$NNAE_PATH/fwkacllib/python/site-packagesENV PATH=$NNAE_PATH/fwkacllib/ccec_compiler/bin/:$PATHENV ASCEND_OPP_PATH=$NNAE_PATH/oppENV PYTHONPATH=$HOST_ASCEND_BASE/tfplugin/latest/tfplugin/python/site-packages:\$FWK_PYTHON_PATH:\$FWK_PYTHON_PATH/auto_tune.egg:\$FWK_PYTHON_PATH/schedule_search.egg:\$TBE_IMPL_PATH:\$PYTHONPATHENV LD_LIBRARY_PATH=$NNAE_PATH/fwkacllib/lib64:\/usr/local/Ascend/driver/lib64/common/:\/usr/local/Ascend/driver/lib64/driver/:\/usr/local/Ascend/add-ons/:\/usr/local/Ascend/driver/tools/hccn_tool/:\$LD_LIBRARY_PATH# Bazel安装RUN git config --global http.proxy socks5://172.168.3.3:7891 && \ git config --global https.proxy socks5://172.168.3.3:7891ENV http_proxy=http://172.168.3.3:7890ENV https_proxy=https://172.168.3.3:7890RUN mkdir bazel-3.7.2-dist && \ unzip bazel-3.7.2-dist.zip -d bazel-3.7.2-dist && \ cd bazel-3.7.2-dist && \ env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" bash ./compile.sh && \ cp output/bazel /usr/local/bin# TensorFlow安装ENV PYTHON_BIN_PATH=/usr/local/python3.7.5/bin/python3ENV PYTHON_LIB_PATH=/usr/local/python3.7.5/lib/python3.7/site-packagesRUN cd tensorflow-2.6.5 && \ ./configure && \ cp /tmp/.tf_configure.bazelrc . && \ bazel build --jobs=190 --local_ram_resources=204800 //tensorflow/tools/pip_package:build_pip_package && \ ./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkgENV http_proxy=ENV https_proxy=RUN pip3 install /tmp/tensorflow_pkg/tensorflow*.whl# NPU_Device安装RUN pip3 install --upgrade numpyRUN pip3 listENV ADAPTER_TARGET_PYTHON_PATH=/usr/local/python3.7.5/bin/python3ENV ASCEND_INSTALLED_PATH=/usr/local/Ascend/ascend-toolkit/latestRUN cd tensorflow/tf_adapter_2.x && \ ./configure && \ mkdir build && \ cd build && \ cmake .. && \ make -j 96 && \ pip3 install --upgrade ./dist/python/dist/npu_device-0.1-py3-none-any.whl# 收尾工作RUN pip3 install tensorflow-io# 清理工作RUN rm -f /etc/ascend_install.info && \ rm -rf /tmp/*报错截图:已在Gitee上提issue,暂未收到回复:导入npu_device报错undefined symbol: _ZNK10tensorflow8OpKernel11TraceStringERKNS_15OpKernelContextEb · Issue #I5X6OH · Ascend/tensorflow - Gitee.com
-
这几天在构建支持tensorflow 2.6.5版本的镜像,需要编译tf_adapter_2.x,报fatal error: acl/acl_tdt.h: No such file or directory查阅CMakeLists.txt文件发现该文件应该位于/usr/local/Ascend/runtime下面,但是我的环境下(已经安装了nnae和tfplugin)并没有此文件想知道这个文件是哪个软件包里带的?tf_adapter_2.x · Ascend/tensorflow - 码云 - 开源中国 (gitee.com)
-
求教各位大佬 !!!为啥我用自动迁移工具迁移tensorflow的程序 模型训练运行后只有 HBM在使用 为啥没使用到AI core呢??我的是一个LSTM的预测模型 调用不到AI -core 很困惑
-
如题,算子校验中想测试输入数据是否大于4GB,若大于则返回错误,想了解一下 GetSize()函数返回的数据大小的单位是什么
-
本文的视频讲解可以在以下链接观看:https://www.bilibili.com/video/BV1HP4y1f7ev?spm_id_from=333.999.0.0&vd_source=18d17b9159b860c92bf39cce650c8ae1PyTorch模型开发使用Profiling性能调优Profiling工具的简要介绍MindStudio针对昇腾AI处理器提供高效、易用的系统化性能分析工具Profiling 。该工具实现了Host+Device侧丰富的性能数据采集能力和全景Timeline交互分析能力,展示Host+Device侧各项性能指标,帮助用户快速发现和定位AI应用、芯片及算子的性能瓶颈。包括资源瓶颈导致的AI算法短板,指导算法性能提升和系统资源利用率的优化。Profiling提供针对APP工程的硬件和软件性能数据采集、分析、汇总展示。总体流程如下:运行Profiling采集性能数据。用户在配置界面开启Profiling开关(推理场景需确保APP工程可正常执行;训练场景直接执行采集)。MindStudio编译当前工程生成可执行文件,并将可执行文件拷贝到设备侧,MindStudio向Profiling工具下发数据采集指令,由Profiling工具完成Device侧和Host侧数据采集任务,采集结束后,将生成的数据文件拷贝到MindStudio侧。MindStudio查询并解析数据。Profiling采集结束后,MindStudio调用Profiling工具接口查询数据,并将数据以json格式存储在“.mindstudio/profiler/data/profiling_out/PROF_XXX”目录下。MindStudio展示性能数据。MindStudio通过对json文件做数据处理,生成前端展示视图数据。(源自:cid:link_2 )二、Profiling针对硬件和软件性能数据采集、分析、汇总展示Profiling提供针对硬件和软件性能数据采集、分析、汇总展示。总体流程如下:1 使用前准备首先完成推理场景下工程文件的开发,并通过MindStudio编译、运行,确保工程项目正常运行。开发过程可参考官方应用开发教程:cid:link_32. Profiling数据采集通过以下操作方法启动Profiling:1)在欢迎界面的左侧导航栏单击“Projects”,单击选择并打开已编译完成的工程。图1 选择并打开已编译完成的基于pytorch框架的Ghostnet工程2)单击菜单栏“Ascend > System Profiler > New Project”,弹出Profiling配置窗口。图2 Profiling配置窗口3)进入Profiling配置窗口,如图3。配置“Project Properties”,配置工程名称“Project Name”和选择工程路径“Project Location”。单击“Next”进入下一步。图3 Project Properties配置参数说明Project NameProfiling工程名称,用户自定义。Project LocationAI工程路径。推理场景时,指定推理应用工程路径;训练场景时,指定训练工程路径。4)进入“Executable Properties”配置界面,在Linux环境下可选择Remote Run和Local Run两种模式,但在Windows使用场景下仅支持Remote Run,并根据指定的工程目录(App Projet Path)识别对应的工程类型。Remote Run下的推理算子工程如下图所示。图4 Remote Run(推理算子工程)参数说明Deployment运行配置,选择Remote Run模式时可见,必选配置。通过Deployment功能,可以将指定项目中的文件、文件夹同步到远程指定机器的指定目录。App Project Path执行Profiling目标工程目录,必选配置。可根据指定的目标工程识别工程类型为:Ascend App:表示指定的目标工程为推理应用工程。Ascend Operator:表示指定的目标工程为推理算子工程。Ascend Training:表示指定的目标工程为训练工程,此时可直接单击“start”按钮启动Profiling。Executable File执行Profiling目标工程的可执行文件目录,必选配置。需指定为App Project Path的子目录。支持指定二进制脚本文件、Python脚本文件和Shell脚本文件。指定Python脚本文件时由于msprof工具的限制有如下要求:1)acl工程中的Python脚本中的路径信息必须为绝对路径。2)不支持异步接口(接口名以async结尾)的调用。3)不支持Profiling的Remote Run模式进行采集。指定Shell脚本文件由用户自行提供,且无需指定为App Project Path的子目录。Command Arguments用户APP的执行参数,由用户自行配置,参数之间用空格分隔,默认为空。Environment Variables环境变量配置。可以直接在框中输入也可以单击后在出的弹窗内单击填写。可选配置。Remote Toolkit Path远端运行环境toolkit软件包安装路径,选择Remote Run模式时可见,必选配置。例如配置为/home/HwHiAiUser/Ascend/ascend-toolkit/latest/toolkit。5)进入“Profiling Options”配置界面,其中配置AI Core Profiling时可分别设置为Task-based和Sample-based场景,此处我们选择Task-based场景。如图5所示。图5 Task-based场景参数说明AI Core ProfilingTask-BasedAI Core采集开关,以task为粒度进行性能数据采集。Pipeline Utilization:采集计算单元和搬运单元耗时占比。Arithmetic Utilization:cube和vector的指令类型耗时占比。UB/L1/L2/Main Memory Bandwidth:UB/L1/L2/主存储器采集内存读写带宽速率。L0A/L0B/L0C Memory Bandwidth: L0A/L0B/L0C采集内存读写带宽速率。UB Memory Bandwidth:mte/vector/scalar采集ub读写带宽速率。Sample-BasedAI Core采集开关,以固定的时间周期(AI Core-Sampling Interval)进行性能数据采集。Pipeline Utilization:采集计算单元和搬运单元耗时占比。Arithmetic Utilization:cube和vector的指令类型耗时占比。UB/L1/L2/Main Memory Bandwidth:UB/L1/L2/主存储器采集内存读写带宽速率。L0A/L0B/L0C Memory Bandwidth: L0A/L0B/L0C采集内存读写带宽速率。UB Memory Bandwidth:mte/vector/scalar采集ub读写带宽速率。Frequency(hz):采集频率,默认值为100,单位hz。MsprofTXMsprofTX控制msproftx用户和上层框架程序输出性能数据采集的开关。API TraceAscend APIAscendCL(Ascend Compute Language)采集开关,采集接口流水信息。可选配置,默认勾选。Runtime APIRuntime采集开关,采集运行管理器接口流水信息。可选配置,默认勾选。OS Runtime API系统运行时函数库API和Pthreads API的调用。可选配置,默认勾选。Graph Engine (GE)Graph Engine采集开关,采集模型图引擎调度流水信息。可选配置。AICPU OperatorsAI CPU采集开关,采集aicpu数据增强的Profiling数据。Device System SamplingDDR采集DDR数据。可选配置,默认勾选。可以更改采样频率Frequency(hz),默认频率为50Hz。Host System SamplingCPU采集Host侧CPU资源利用率信息。可选配置,默认勾选。Memory采集Host侧Memory资源利用率信息。可选配置。Disk采集Host侧Disk资源利用率信息。可选配置。Network采集Host侧Network资源利用率信息。可选配置。HCCLHCCL控制HCCL数据采集开关。当前采集完成HCCL数据后默认仅导出最小模型号(Model ID)的第一轮迭代数据。6)完成上述配置后单击窗口右下角的“Start”按钮,启动Profiling。工程执行完成后,MindStudio窗口下方自动展示Profiling结果视图。三、完成服务端Profiling工具的依赖安装iotop、ltrace、perf等依赖非必要安装,如需采集OS Runtime API则要求安装。(OS Runtime API:系统运行时函数库API和Pthreads API的调用。默认勾选。)我们在Ubuntu 18.04操作系统下进行测试,执行以下命令安装。1. iotop工具安装方法:此处以python3为例进行介绍,若用户使用其他版本Python,请自行适配。wget http://guichaz.free.fr/iotop/files/iotop-0.6.tar.bz2tar -xvf iotop-0.6.tar.bz2cd iotop-0.6sed -i 's/itervalues/values/g' setup.pypython3 setup.py buildpython3 setup.py installln -s /usr/local/python3/sbin/iotop /usr/sbin/iotopln -s /usr/local/python3/bin/iotop /usr/bin/iotop配置结果如图6所示:图6 iotop工具安装结果2. perf工具安装方法:apt-get install linux-tools-common安装结果如图7所示:图7 perf工具安装结果安装完成后执行perf命令,根据系统提示继续使用apt-get install安装linux-tools-x和linux-cloud-x执行perf命令结果如图8所示:图8 执行perf命令结果按照提示,使用apt-get install安装linux-tools-4.15.0-156-generic和linux-cloud-4.15.0-156-generic。安装结果如图9和图10所示图9 linux-tools-4.15.0-156-generic安装结果图10 linux-cloud-tools-4.15.0-156-generic安装结果3. ltrace工具安装方法:apt-get install ltrace安装结果如图11所示:图11 ltrace工具安装结果四、以Ghostnet网络模型为例演示Profiling数据采集流程1)启动MindStudio,单击选择并打开已编译完成的工程。如图12所示。图12 打开已编译完成的工程2)单击菜单栏“Ascend > System Profiler > New Project”,弹出Profiling配置窗口。3)进入Profiling配置窗口,配置Profiling的工程名称“Project Name”和选择Profiling工程的结果路径“Project Location”。单击“Next”进入下一步。4)进入“Executable Properties”配置界面。指定执行Profiling目标工程的可执行文件目录。如图13所示。图13 Remote Run5)进入“Profiling Options”配置界面,选择Task-based场景。6)完成上述配置后单击窗口右下角的“Start”按钮,启动Profiling。如图14所示,即为运行成功。五、以Ghostnet网络模型为例演示解析profiling数据的流程工程执行完成后,MindStudio窗口下方自动展示Profiling结果视图。单击Timeline视图下方数据窗格的Statistics视图中aclmdExecute接口体现网络整体运行时间达到了4.02s,单击AI Core Metrics视图查看。图15 ghostnet网络应用推理运行结果_Statistics图16 ghostnet网络应用推理运行结果_AI Core Metrics六、对Merge Reports,TimeLine View, Analysis Summary, Baseline Comparison的作用进行详述1.Merge reports本功能的作用是对于Profiling采集后的性能原始数据通过MindStudio界面进行解析并展示。配置步骤如下:(1)单击菜单栏“Ascend > System Profiler > Merge Reports”,弹出Merge Reports配置窗口 。(2)配置Merge Reports的数据源输入路径、数据输出路径以及输出展示的Json文件名。如图17所示。图17 Merge Reports配置参数说明Input directory数据源输入路径。指定为msprof命令指定的数据输出路径。Output directory数据输出路径。Output Json name输出展示的Json文件名。2.TimeLine Viewa. Timeline颜色配置在MindStudio菜单栏选择“Ascend > System Profiler > Timeline Color”,或者在打开的Project Explorer界面上单击左上角的图标。Timeline颜色配置窗口如图18所示。图18 Timeline颜色配置可以根据API执行时间自定义配置Timeline中的颜色显示比例,显示格式为:绿色 a% ≤ 黄色 < b% ≤ 红色,此设置的数值表示在Profiling采集过程中接口运行时间的耗时占比。耗时占比小于等于5%的时间线显示为绿色,耗时占比在5%~10%的时间线显示为黄色,耗时占比超过10%的时间线显示为红色。(注:配置颜色比例的数值最多可精确到小数点后两位)b. TimeLine视图TimeLine View包含左侧导航窗格、右侧图形化窗格和下方数据窗格。导航窗格显示各个Timeline的名称,以及各个Timeline之间的从属关系;图形化窗格对应导航窗格,逐行对Timeline进行图形化展现;数据窗格以表格的形式呈现Profiling采集之后的各项数据,分为Event View、Statistics和AI Core Metrics。说明Profiling数据中涉及到的时间节点(非Timestamp)为系统单调时间只与系统有关,非真实时间。“Start Time”和“End Time”表示本次性能采集数据的展示时间范围。“Current Time”表示鼠标所在时间块的开始时间。将鼠标移动到具体采样点,可以查看对应采样点具体分析数据。在左侧导航窗格中右键标签名,选择“Show in Event View”,可以在Event View界面中看到对应选项Timeline的顺序执行信息。在TimeLine中可以查看对应的API或操作的名称。同一线程中有多个OS Runtime API同时执行时会分行显示。同一Stream中有多个AI Core task同时执行时会分行显示。当选中TimeLine中某个时间点时,按住Ctrl键并向上/下滚动鼠标滑轮或点击视图右上角的/,实现Timeline视图的放大/缩小。点击视图右上角的实现视图复位。当选中TimeLine中某个时间点时,可通过左右拖拉鼠标选择时间长度。以Current Time(us)为界点,鼠标向右拖动时间段显示为正,向左拖动时间段显示为负。在Profiling运行完成后,以时序图的呈现方式为用户提供全流程推理/训练过程中的运行情况,按照调度流程OS Runtime、ACL API、Runtime API、Graph Engine(GE)、A ICPU task、AI Core task和System task来呈现整体的运行状况。实际展示情况与Profiling采集时的所选项以及设备有关,请以设备实际情况为准。OS Runtime:展示每个线程调用OS Runtime的时序信息。ACL API:展示模型、算子、Runtime API等耗时数据。如果没有某一类数据则不显示。Runtime API:展示每个线程调用runtime API的时序信息。GE:展示模型的数据输入、推理、数据输出耗时。Step Trace:迭代轨迹数据,每轮迭代的耗时。AI Core task:展示每个Stream的AI Core task时序信息。System task:展示每个Stream的System task时序信息。c. Event视图在TimeLine View界面的左侧导航窗格中右键标签名,选择“Show in Event View”,可以在下方数据窗格的Event View中看到对应选项Timeline的顺序执行信息,操作如图19所示。图19 Show in Event View可查看项目包括:Process > Thread > Os RuntimeProcess > Thread > ACL API(model/runtime)Process > Thread > Runtime APINPU 0> Stream > AI Core task图20 ACL API(model/runtime)字段名字段解释IDACL API的ID。NameACL API的名称。Start Time(us)ACL API的开始运行时间,单位为us。End Time(us)ACL API的结束运行时间,单位为us。Duration(us)ACL API的运行耗时,单位为us。Process IDACL API对应进程ID。Thread IDACL API对应线程ID。图21 Runtime API字段名字段解释IDRuntime API的ID。NameRuntime API的名称。Start Time(us)Runtime API的开始运行时间,单位为us。End Time(us)Runtime API的结束运行时间,单位为us。Duration(us)Runtime API的运行耗时,单位为us。Process IDRuntime API对应进程ID。Thread IDRuntime API对应线程ID。图22 Os Runtime字段名字段解释IDOs Runtime的ID。NameOs Runtime的名称。Start Time(us)Os Runtime的开始运行时间,单位为us。End Time(us)Os Runtime的结束运行时间,单位为us。Duration(us)Os Runtime的运行耗时,单位为us。Process IDOs Runtime对应进程ID。Thread IDOs Runtime对应线程ID。图23 AI Core task字段名字段解释IDAI Core task的ID。Device IDAI Core task运行所在设备ID。Op NameAI Core task的算子名称。Start Time(us)AI Core task的开始运行时间,单位为us。End Time(us)AI Core task的结束运行时间,单位为us。Duration(us)AI Core task的运行耗时,单位为us。StatusAI Core task的运行状态。Task TypeAI Core task的任务类型。Stream IDAI Core task的stream ID。Task IDAI Core task的task ID。d. Statistics视图单击下方数据窗格的Statistics,通过左上角下拉框选择不同类别的数据,可以查看ACL API、OS Runtime API、Runtime API、OPs和Op Info调用情况数据。图24 ACL API图25 OS Runtime API字段名字段解释Name对应调用API名称。Type(仅ACL API)调用ACL API的类型。Time(%)对应调用API总时间占比。Time(us)对应调用API时间长度,单位为us。可以点击字段旁边的三角号根据此项进行降序或升序排列。Count对应API调用次数。Avg(us)对应API单次调用平均时间,单位为us。Min(us)对应API单次调用最短时间,单位为us。Max(us)对应API单次调用最长时间,单位为us。Process ID对应调用API所在进程ID。Thread ID对应调用API所在线程ID。图26 Runtime APITime(%)对应调用API总时间占比。Time(ns)对应调用API时间长度,单位为ns。可以点击字段旁边的三角号根据此项进行降序或升序排列。Calls调用Runtime API的呼叫次数。Avg(ns)对应API单次调用平均时间,单位为ns。Min(ns)对应API单次调用最短时间,单位为ns。Max(ns)对应API单次调用最长时间,单位为ns。Process ID对应调用API所在进程ID。Thread ID对应调用API所在线程ID。图27 OPs(昇腾310 AI处理器)字段名字段解释Time(%)对应调用API总时间占比。Time(us)对应调用API时间长度,单位为us。可以点击字段旁边的三角号根据此项进行降序或升序排列。Count对应的Task被执行的次数。Avg(us)对应Task平均执行时间,单位为us。Min(us)对应Task最短执行时间,单位为us。Max(us)对应Task最长执行时间,单位为us。Waiting(us)对应Task总计waiting时间,单位为us。Running Man(us)对应Task总计running时间,单位为us。表示Task的实际运行时间,过长的Task运行时间可能意味着算子实现存在问题。Pending(us)对应Task总计pending时间,单位为us。Type对应Task的类型。API调用的接口。Task IDTask ID,用于识别task。Op Name算子名称。Stream IDStream ID,用于识别stream。图28 Op Info字段名字段解释Model Name模型名称。推理应用中存在离线模型调用时(ACL函数接口:aclModelExecute),本参数展示;不存在离线模型调用时,本参数不展示。Task IDTask ID,用于识别task。Stream IDStream ID,用于识别stream。Op Name算子名称。Op Type算子类型。Task Start TimeTask的开始运行时间。Task Duration(us)Task的运行耗时,单位为us。Task Wait Time(us)上一个Task的结束时间与当前Task的开始时间间隔,单位为us。Block DimTask运行时所在的核。Input Shapes算子的输入维度。Input Data Types算子输入的数据类型。Input Formats算子输入格式。Output Shapes算子的输出维度。Output Data Types算子输出的数据类型。Output Formats算子输出格式。Aicore Time(us)(仅采集方式为Task-Based时展示)AI Core运行时间,单位为us。Total Cycles(仅采集方式为Task-Based时展示)该Task的所有指令的cycle总数。e. AI Core Metrics视图单击下方数据窗格的AI Core Metrics,可以查看AI Core Metrics数据。图29 AI Core MetricsTask Wait Time(us)任务等待时间,单位为us。Aicore Time(us)AI Core运行时间,单位为us。Total Cycles该Task的所有指令的cycle总数。vec_time(us)vec类型指令(向量类运算指令)耗时,单位为us。vec_ratiovector类型指令(向量类运算指令)的cycle数在所有指令的cycle数中的占用比。mac_time(us)cube类型指令(矩阵类运算指令)耗时,单位为us。mac_ratiocube类型指令(矩阵类运算指令)的cycle数在所有指令的cycle数中的占用比。scalar_time(us)scalar类型指令(标量类运算指令)耗时,单位为us。scalar_ratioscalar类型指令(标量类运算指令)的cycle数在所有指令 的cycle数中的占用比。mte1_time(us)mte1类型指令(L1->L0A/L0B搬运类指令)耗时,单位为us。mte1_ratiomte1类型指令(L1->L0A/L0B搬运类指令)的cycle数在所 有指令的cycle数中的占用比。mte2_time(us)mte2类型指令(DDR->AI Core搬运类指令)耗时,单位为us。mte2_ratiomte2类型指令(DDR->AI Core搬运类指令)的cycle数在 所有指令的cycle数中的占用比。mte3_time(us)mte3类型指令(AI Core->DDR搬运类指令)耗时,单位为us。mte3_ratiomte3类型指令(AI Core->DDR搬运类指令)的cycle数在 所有指令的cycle数中的占用比。icache_miss_rateicache缺失率,即未命中icache,数值越小越好。memory_bound用于识别AI Core执行算子计算过程是否存在Memory瓶颈,由Mte2 Ratio/max(Mac Ratio, Vec Ratio)计算得出。计算结果小于1, 表示没有Memory瓶颈;计算结果大于1 则表示有Memory瓶颈,且数值越大越瓶颈严重。3.Analysis Summary在“Analysis Summary”模块中,选择需要查看的Device ID后,可以查看对应device的详细性能分析信息。图30 Analysis Summary视图Profiling InfoResult Size结果文件大小。Profiling Elapsed Time信息采集持续的时间。Host System InfoCpu NumCPU数量。Host Operating SystemHost侧操作系统信息。Host Computer NameHost侧电脑名称。Host CPU InfoCPU IDCPU ID。NameCPU名称。TypeCPU型号。FrequencyCPU频率。部分系统由于不存在调用频率的接口,故不展示此参数,本参数展示情况请以实际情况为准。Logical CPU Count逻辑CPU数量。Device InfoAI Core NumberAI Core 数量。AI CPU NumberAI CPU数量。Control CPU NumberControl CPU数量。Control CPU TypeControl CPU型号。Device Id当前页面关联的Device IDTS CPU NumberTS CPU数量。DDRMetricBandWidth,单位为MB/s。Read(MB/s)读带宽,单位为MB/s。Write(MB/s)写带宽,单位为MB/s。AI Core UtilizationAI Core利用率通过折线图方式呈现(AI Core Utilization参数选择Sample-based才会展示)4.Baseline ComparisonProfiling报告可以通过对比功能将两份报告的结果数据进行比对,并在Baseline Comparison(基准分析)视图展示。方便在重复执行Profiling之后产生多个报告后,对比相同情况下多次采集的数据之间的变化情况。如图31在打开的Profiling报告中选择Baseline Comparison视图,单击Baseline file path右侧文件夹按钮,如图32选择需要与当前报告比对的基线数据报告(.json文件)。图31 Baseline Comparison视图图32 选择基线数据报告两份报告比对结果如图33和图34,以Baseline file path所选报告的数据为基础,比对当前报告的数值以增减相应差值展示。图33 Task-based场景比对结果图34 Sample-based场景比对结果说明Baseline Comparison仅比对OPs和AI Core Metrics的结果数据。Baseline Comparison仅支持相同Device ID的Profiling结果数据对比。结果数据比对的差值保留小数点后两位。Profiling elapsed time表示当前Device下本次Profiling执行采集的时间。一般情况下两份报告之间须在相同设备、模型以及采集参数下的两次Profiling生成的数据,否则结果数据不匹配无法比较,并给出相应告警提示;但如果两个不同设备或模型采集的数据完全相同,也可以进行比较。Sample-based场景展示AI Core Utilization的折线图比对结果。七、以Ghostnet网络模型执行完成后自动展示的Profiling的结果试图为例,分析网络存在的问题并进行相应优化工程执行完成后,MindStudio自动展示Profiling结果视图。如图35所示。图35 Profiling分析结果查看Timeline颜色配置调色板,默认显色比例为5%<=黄色<10%<=红色,如图36所示。通过视图我们可以直观的看到任务耗时均为绿色片段,即不存在耗时远超其他的时间片段。我们接着在ACL API字段上右键点击Show in Event View并将Duration列按从大到小排序。如图37所示。图37 Event View可以看到耗时最高的ACL接口为aclmdlExcute。我们继续查看ACL API的Statistics视图并按接口调用耗时占比从高到底排序。如图38所示。图38 Statistics视图到这里我们可以断定执行应用推理过程中耗时最高的接口就是aclmdlExcute。参见《应用软件开发指南(C&C++)》中的“AscendCL API参考”章节查找aclmdlExecute接口的作用为“执行应用推理,直到返回推理结果,同步接口”。我们可以发现该接口是执行接口,也就是说应用在执行推理的过程中确实存在耗时长的问题。而模型中所有算子执行的时间总和就是执行耗时。那么我们查看Profiling结果的AI Core Metrics中的算子执行耗时并按Task Duration算子执行任务的时间从高到低排列。如图39所示。图39 AI Core Metrics可以看到每个算子的执行时间与同进程下其他算子的执行时间都相差不大。到此Profiling性能分析工具的任务已经完成。结论通过上述分析可以发现,该版本的基于pytorch框架的Ghostnet网络模型中并不存在耗时远超同进程下其他的算子,各算子执行时间比较均衡,我们认为可优化空间较小。
推荐直播
-
HDC深度解读系列 - Serverless与MCP融合创新,构建AI应用全新智能中枢2025/08/20 周三 16:30-18:00
张昆鹏 HCDG北京核心组代表
HDC2025期间,华为云展示了Serverless与MCP融合创新的解决方案,本期访谈直播,由华为云开发者专家(HCDE)兼华为云开发者社区组织HCDG北京核心组代表张鹏先生主持,华为云PaaS服务产品部 Serverless总监Ewen为大家深度解读华为云Serverless与MCP如何融合构建AI应用全新智能中枢
回顾中 -
关于RISC-V生态发展的思考2025/09/02 周二 17:00-18:00
中国科学院计算技术研究所副所长包云岗教授
中科院包云岗老师将在本次直播中,探讨处理器生态的关键要素及其联系,分享过去几年推动RISC-V生态建设实践过程中的经验与教训。
回顾中 -
一键搞定华为云万级资源,3步轻松管理企业成本2025/09/09 周二 15:00-16:00
阿言 华为云交易产品经理
本直播重点介绍如何一键续费万级资源,3步轻松管理成本,帮助提升日常管理效率!
回顾中
热门标签