阿里云DSW实例运行LeNet Sample

简介: LeNet,它是最早发布的卷积神经网络之一,因其在计算机视觉任务中的高效性能而受到广泛关注。 这个模型是由AT&T贝尔实验室的研究员Yann LeCun在1989年提出的(并以其命名),目的是识别图像中的手写数字。本文主要演示在阿里云PAI DSW实例中使用GPU资源运行LetNet网络。

Step By Step

1、创建GPU实例
2、查看使用GPU卡情况
3、LetNet Code运行示例
4、显存释放问题


一、创建GPU实例

图片.png

二、查看使用GPU卡情况
!nvidia-smi

图片.png

  • 查看tf版本及devices信息
import tensorflow as tf
print(tf.__version__)
tf.config.list_physical_devices()

图片.png

三、LetNet Code运行示例
  • 3.1 Code Sample
import tensorflow as tf
import matplotlib.pyplot as plt
from tensorflow import keras

# 数据预处理函数
def preprocess(x, y):
    x = tf.cast(x, dtype=tf.float32) / 255.
    x = tf.reshape(x, [-1, 32, 32, 1])
    y = tf.one_hot(y, depth=10)  # one_hot 编码
    return x, y


# 加载数据集
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data()

# 样本图像周围补0(上下左右均补2个0),将28*28的图像转成32*32的图像
paddings = tf.constant([[0, 0], [2, 2], [2, 2]])
x_train = tf.pad(x_train, paddings)
x_test = tf.pad(x_test, paddings)

train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train))
train_db = train_db.shuffle(10000)  # 打乱训练集样本
train_db = train_db.batch(128)
train_db = train_db.map(preprocess)

test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test))
test_db = test_db.shuffle(10000)  # 打乱测试集样本
test_db = test_db.batch(128)
test_db = test_db.map(preprocess)

batch = 32

# 创建模型
model = keras.Sequential([
    # 卷积层1
    keras.layers.Conv2D(6, 5),  # 使用6个5*5的卷积核对单通道32*32的图片进行卷积,结果得到6个28*28的特征图
    keras.layers.MaxPooling2D(pool_size=2, strides=2),  # 对28*28的特征图进行2*2最大池化,得到14*14的特征图
    keras.layers.ReLU(),  # ReLU激活函数
    # 卷积层2
    keras.layers.Conv2D(16, 5),  # 使用16个5*5的卷积核对6通道14*14的图片进行卷积,结果得到16个10*10的特征图
    keras.layers.MaxPooling2D(pool_size=2, strides=2),  # 对10*10的特征图进行2*2最大池化,得到5*5的特征图
    keras.layers.ReLU(),  # ReLU激活函数
    # 卷积层3
    keras.layers.Conv2D(120, 5),  # 使用120个5*5的卷积核对16通道5*5的图片进行卷积,结果得到120个1*1的特征图
    keras.layers.ReLU(),  # ReLU激活函数
    # 将 (None, 1, 1, 120) 的下采样图片拉伸成 (None, 120) 的形状
    keras.layers.Flatten(),
    # 全连接层1
    keras.layers.Dense(84, activation='relu'),  # 120*84
    # 全连接层2
    keras.layers.Dense(10, activation='softmax')  # 84*10
])
model.build(input_shape=(batch, 32, 32, 1))
model.summary()

model.compile(optimizer=keras.optimizers.Adam(), loss=keras.losses.CategoricalCrossentropy(), metrics=['accuracy'])
# 训练
history = model.fit(train_db, epochs=50)

# 损失下降曲线
plt.plot(history.history['loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.show()

# 测试
model.evaluate(test_db)
  • 运行结果
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz
32768/29515 [=================================] - 0s 1us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz
26427392/26421880 [==============================] - 1s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz
8192/5148 [===============================================] - 0s 0us/step
Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz
4423680/4422102 [==============================] - 0s 0us/step
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (32, 28, 28, 6)           156       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (32, 14, 14, 6)           0         
_________________________________________________________________
re_lu (ReLU)                 (32, 14, 14, 6)           0         
_________________________________________________________________
conv2d_1 (Conv2D)            (32, 10, 10, 16)          2416      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (32, 5, 5, 16)            0         
_________________________________________________________________
re_lu_1 (ReLU)               (32, 5, 5, 16)            0         
_________________________________________________________________
conv2d_2 (Conv2D)            (32, 1, 1, 120)           48120     
_________________________________________________________________
re_lu_2 (ReLU)               (32, 1, 1, 120)           0         
_________________________________________________________________
flatten (Flatten)            (32, 120)                 0         
_________________________________________________________________
dense (Dense)                (32, 84)                  10164     
_________________________________________________________________
dense_1 (Dense)              (32, 10)                  850       
=================================================================
Total params: 61,706
Trainable params: 61,706
Non-trainable params: 0
_________________________________________________________________
Epoch 1/50
469/469 [==============================] - 2s 4ms/step - loss: 0.6662 - accuracy: 0.7553
Epoch 2/50
469/469 [==============================] - 2s 4ms/step - loss: 0.3988 - accuracy: 0.8569
Epoch 3/50
469/469 [==============================] - 2s 4ms/step - loss: 0.3414 - accuracy: 0.8751
Epoch 4/50
469/469 [==============================] - 2s 4ms/step - loss: 0.3081 - accuracy: 0.8861
Epoch 5/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2888 - accuracy: 0.8938
Epoch 6/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2733 - accuracy: 0.8997
Epoch 7/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2590 - accuracy: 0.9039
Epoch 8/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2464 - accuracy: 0.9078
Epoch 9/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2358 - accuracy: 0.9126
Epoch 10/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2292 - accuracy: 0.9155
Epoch 11/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2175 - accuracy: 0.9190
Epoch 12/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2096 - accuracy: 0.9227
Epoch 13/50
469/469 [==============================] - 2s 4ms/step - loss: 0.2022 - accuracy: 0.9239
Epoch 14/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1929 - accuracy: 0.9284
Epoch 15/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1875 - accuracy: 0.9301
Epoch 16/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1776 - accuracy: 0.9342
Epoch 17/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1737 - accuracy: 0.9349
Epoch 18/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1658 - accuracy: 0.9379
Epoch 19/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1592 - accuracy: 0.9407
Epoch 20/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1515 - accuracy: 0.9438
Epoch 21/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1461 - accuracy: 0.9445
Epoch 22/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1403 - accuracy: 0.9467
Epoch 23/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1340 - accuracy: 0.9487
Epoch 24/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1295 - accuracy: 0.9506
Epoch 25/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1235 - accuracy: 0.9536
Epoch 26/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1189 - accuracy: 0.9545
Epoch 27/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1134 - accuracy: 0.9571
Epoch 28/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1059 - accuracy: 0.9602
Epoch 29/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1028 - accuracy: 0.9615
Epoch 30/50
469/469 [==============================] - 2s 4ms/step - loss: 0.1006 - accuracy: 0.9616
Epoch 31/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0936 - accuracy: 0.9644
Epoch 32/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0892 - accuracy: 0.9663
Epoch 33/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0846 - accuracy: 0.9683
Epoch 34/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0807 - accuracy: 0.9692
Epoch 35/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0756 - accuracy: 0.9711
Epoch 36/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0763 - accuracy: 0.9718
Epoch 37/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0700 - accuracy: 0.9732
Epoch 38/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0687 - accuracy: 0.9748
Epoch 39/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0648 - accuracy: 0.9754
Epoch 40/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0611 - accuracy: 0.9771
Epoch 41/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0602 - accuracy: 0.9774
Epoch 42/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0564 - accuracy: 0.9793
Epoch 43/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0533 - accuracy: 0.9807
Epoch 44/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0531 - accuracy: 0.9803
Epoch 45/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0499 - accuracy: 0.9809
Epoch 46/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0452 - accuracy: 0.9827
Epoch 47/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0433 - accuracy: 0.9847
Epoch 48/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0439 - accuracy: 0.9838
Epoch 49/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0367 - accuracy: 0.9864
Epoch 50/50
469/469 [==============================] - 2s 4ms/step - loss: 0.0415 - accuracy: 0.9847

79/79 [==============================] - 0s 3ms/step - loss: 0.5499 - accuracy: 0.9044
[0.5498712658882141, 0.9043999910354614]

图片.png

四、显存释放问题
  • 4.1 问题现象

图片.png

  • 4.2 Terminal fuser安装
sudo apt-get update
sudo apt-get install  psmisc

图片.png

  • 4.3 查看僵尸进程
fuser -v /dev/nvidia*

图片.png

  • 4.4 查看具体这个进程调用GPU的情况
pmap -d PID
  • 4.5 强行关掉所有当前并未执行的僵尸进程
sudo kill -9 PID

图片.png

更多参考

解决GPU显存未释放问题
Ubuntu:fuser command not found
TF Implementing LeNet-5 in TensorFlow 2.0

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
网络协议 Linux Android开发
告别无法访问的github(附解决方案)
最近一行在使用github的时候又登不上去了,挂着NPV都没用 据说是某些不可描述的有关组织机构对该网站的DNS污染或者随机丢包造成的
23471 5
告别无法访问的github(附解决方案)
|
4月前
|
存储 边缘计算 人工智能
79_边缘设备环境:Raspberry Pi搭建
在当今人工智能快速发展的时代,大语言模型(LLM)已经成为自然语言处理领域的核心技术。然而,传统的LLM部署通常需要强大的服务器资源,这限制了其在资源受限环境中的应用。随着边缘计算的兴起,在轻量级设备上部署和运行LLM成为了新的技术趋势。树莓派(Raspberry Pi)作为一款广泛使用的单板计算机,凭借其小巧的体积、低功耗特性和不断提升的计算能力,成为了边缘部署LLM的理想选择。
|
7月前
|
人工智能 数据可视化 数据处理
10分钟,用 EvalScope 让文生图模型评估“有理有据”
AI画师们卷出新高度,人类评审却还在搬砖打分?传统文生图模型评测依赖人工标注与主观判断,周期长、成本高、易偏差。魔搭社区推出一站式模型评测框架EvalScope,支持全自动打标、多维雷达图与可视化报告,大幅提升评测效率。10分钟掌握EvalScope,轻松为文生图模型自动评分,让模型“卷”得明明白白!
605 0
|
10月前
|
存储 人工智能 监控
钉钉对话机器人实现赞踩收集
本文介绍如何通过AppFlow记录钉钉AI对话卡片的用户反馈情况。首先确保已接入钉钉AI机器人,然后分三步实现:1) 修改钉钉AI消息卡片,添加点赞按钮并配置回调参数;2) 配置钉钉卡片点赞消息接收连接流,更新卡片状态;3) 设置日志收集节点,存储用户反馈数据。完成配置后,用户可在群聊中与机器人互动,并使用点踩点赞功能,反馈数据将被有效记录和分析。
905 6
钉钉对话机器人实现赞踩收集
|
12月前
|
Linux
Linux系统之whereis命令的基本使用
Linux系统之whereis命令的基本使用
465 25
Linux系统之whereis命令的基本使用
|
12月前
|
Linux Shell
问题记录:解决Linux登录故障,/etc/passwd配置受损该怎么操作
修复/etc/passwd文件是解决Linux登录故障的重要步骤。通过进入单用户模式、挂载文件系统、恢复或手动修复/etc/passwd文件,可以有效解决该问题。保持定期备份系统配置文件是预防此类问题的最佳实践。
368 13
|
存储 自然语言处理 API
打破文本边界:如何进行多模态RAG评估
一般的检索增强生成(RAG,Retrieval-Augmented Generation)方法主要依赖于文本数据,常常忽略了图像中的丰富信息。那么应该如何解决呢?本文带你了解一下这个模型。
打破文本边界:如何进行多模态RAG评估
|
存储 运维 监控
深入Linux基础:文件系统与进程管理详解
深入Linux基础:文件系统与进程管理详解
340 8
|
存储 人工智能 安全
CPFS深度解析:并行文件存储加速AI创新
在生成式AI的大潮中,并行文件系统作为高性能数据底座,为AI算力提供高吞吐、低延迟的数据存储服务。在本话题中,我们将介绍阿里云并行文件存储CPFS针对AI智算场景而提供的产品能力演进与更新,深入讲解在性能、成本、稳定、安全等方面的技术创新。
1262 0
|
Java API 数据中心
百炼平台Java 集成API上传文档到数据中心并添加索引
本文主要演示阿里云百炼产品,如何通过API实现数据中心文档的上传和索引的添加。
1164 4