开宗明义,本篇带来:深度学习的入门框架 —— TensorFlow,以及将其在 Amazon Deep Learning AMI 中私有化部署。
引言
怎么理解深度学习?举个比较直白的例子,我们作为程序员写一段算法用来实现数学中的排序问题可能比较轻松,如果现在要写一段代码来判断一张图片的动物是猫还是狗,那我相信会难倒绝大部分的 CRUD 程序员。
不过这也没啥毛病,毕竟术业有专攻!深度学习可以很方便的处理以上问题判断。目前,作为人工智能的细分,随着今年GPT大模型的兴起,我们(业务程序员)对深度学习再次燃起热情。如果能在自己的项目中引入某些AI功能,比如识图、智能翻译等,还能结合自己的需求去自定义,那网站功能水平一定如虎添翼。
所以,本篇来看看深度学习中最火爆的框架 —— TensorFlow,包括它的核心概念、思想、代码示例,以及如何将其在 Amazon Deep Learning AMI 中进行部署、运行。
第一部分:TensorFlow 入门
什么是 TensorFlow?
TensorFlow 来源于 Google,它提供了一个强大的工具集,用户构建和训练各种深度学习模型,包括卷积神经网络(CNN)、循环神经网络(RNN)和变换器(Transformer)等。现已在 Github 上收获 177k+ star。
“TensorFlow”名字的由来:TensorFlow = Tensor(张量) + Flow(流),所以它的名字意思就是“张量在计算图中流动”。(后文会进一步释义)
官网在这:tensorflow
TensorFlow 的核心概念
- 张量(Tensors) :
张量是TensorFlow的核心数据结构,它是多维数组,可以包含标量、向量、矩阵等。张量可以在计算图中流动,经过各种操作,最终用于模型的训练和推断。
展开来说:标量就是日常的单个数字,比如123、666;向量我们很熟悉,即一维数组,比如一个2×3的矩阵的形状表示是(2, 3);矩阵是二维数组,我们处理数据结构中也常见到:
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
张量就是标量、向量、矩阵和更高维度的数组的统称,有了张量,可以处理各种数据类型和数据结构包括图像、音频、文本等。
- 计算图(Computational Graph) :
TensorFlow使用计算图来表示深度学习模型的计算过程。计算图是一种有向无环图,其中节点表示操作(节点之间传递数据为张量),边表示数据流动(节点之间的输入和输出为张量)。通过构建计算图,TensorFlow可以高效地优化和执行模型。
张量上可以执行各种操作,如加法、乘法、卷积等,它采用延迟计算的方式,也就是说,张量上的操作不会立即执行,而是在需要时延迟执行,这有助于优化计算图的性能。(类比于我以前所提过的 Haskell 函数式编程语言延迟处理的思想)
举栗子:训练一个神经网络计算两个整数,TensorFlow在内部使用计算图来表示如下:
张量是不变的。
- 会话(Session) :
在TensorFlow中,计算图需要在会话中运行,会话负责分配计算资源、执行操作并返回结果。通过会话,可以将数据传递给模型,并获取模型的输出。
会话中的基本步骤代码示意:
import tensorflow as tf
# 创建一个会话
with tf.Session() as sess:
# 在会话中执行操作和计算张量
result = sess.run(some_tensor)
# run 即执行操作
result = sess.run(some_operation)
# 或者计算张量
tensor_value = sess.run(some_tensor)
# 手动关闭会话
sess.close()
- 变量(Variables) :
变量是一种特殊的张量,用于存储模型的参数。在训练过程中,变量的值会不断更新,以优化模型的性能。
我们知道:张量是不变的,变量是可变的。
为什么张量不变?同理思考:为什么函数式编程中不提倡修改变量值,而是通过函数不断地计算而得值?
TensorFlow 变量赋值:
# 创建一个变量
var = tf.Variable(0, name="my_variable")
# 创建一个操作,将变量加1
update_var = var.assign(var + 1)
with tf.Session() as sess:
sess.run(var.initializer)
print(sess.run(var)) # 输出初始值,0
sess.run(update_var)
print(sess.run(var)) # 输出更新后的值,1
TensorFlow 示例
下面介绍一个简单的TensorFlow示例,用于创建一个包含两个变量的线性回归模型,目标是预测连续数值型变量的值:
# 导入TensorFlow库,让它来创建和训练机器学习模型
import tensorflow as tf
# 创建输入占位符,`x` 和 `y`,未初始化
x = tf.placeholder(tf.float32, name='x')
y = tf.placeholder(tf.float32, name='y')
# 创建模型参数,代表线性回归模型的权重和偏差
# 它们将在训练中进行优化,以找到最佳的线性关系来拟合数据
W = tf.Variable(0.0, name='weight')
b = tf.Variable(0.0, name='bias')
# 定义线性回归模型的预测值 `y_pred`,构建线性回归模型
y_pred = W * x + b
# 使用均方误差(MSE)作为损失函数,测量模型预测值 `y_pred` 与真实标签 `y` 之间的差异
# 目标是最小化这个损失,使模型能够更好地拟合数据
loss = tf.reduce_mean(tf.square(y - y_pred))
# 创建优化器
# 使用随机梯度下降(SGD)作为优化算法
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
# 构建训练操作
# 在每次训练迭代中使用优化器来最小化损失函数 `loss`,自动更新模型的权重 `W` 和偏差 `b`,使模型逐渐拟合输入数据
train_op = optimizer.minimize(loss)
以上代码展示了如何使用TensorFlow创建一个简单的线性回归模型(一元线性回归),其中包括定义输入占位符、模型参数、损失函数和优化器。
接下来,我们将介绍如何在Amazon Deep Learning AMI中部署这样的TensorFlow代码。
第二部分:在 Amazon Deep Learning AMI 中私有化部署 TensorFlow 代码
Amazon Deep Learning AMI(Amazon Machine Image-亚马逊云机器镜像)是Amazon Web Services(AWS)提供的一个预配置的深度学习环境,它包括了许多深度学习框架和工具的预安装,使得在AWS云上运行深度学习工作负载变得非常容易。
原理架构图:
AMI 专为 Amazon Linux 和 Ubuntu 构建,预配置了 TensorFlow、PyTorch、Apache 等框架工具,可快速地大规模部署和运行这些框架和工具。
步骤 1:启动 Amazon Deep Learning AMI
首先,需要登录到AWS控制台,启动一个Amazon Deep Learning AMI实例。可以选择适合需求的实例类型,例如p3、g4或者最新的深度学习优化实例,具体配置参考如下:
-
P3: 8 NVIDIA Tesla V100 GPUs
-
G4:4 NVIDIA T4 GPUs
步骤 2:连接到实例
一旦实例启动,可以使用SSH或者AWS Systems Manager Session Manager等工具连接到实例。
步骤 3:设置环境
Amazon Deep Learning AMI预安装了TensorFlow,可以通过以下命令检查TensorFlow版本:
python -c "import tensorflow as tf; print(tf.__version__)"
步骤 4:运行 TensorFlow 代码
将TensorFlow代码上传到实例,或者使用git clone等方式获取代码。然后,可以在Amazon Deep Learning AMI上运行代码,例如:
python your_tensorflow_code.py
TensorFlow 线性回归拟合结果
步骤 5:监视和优化性能
Amazon Deep Learning AMI还提供了各种工具和资源,用于监视和优化深度学习工作负载的性能。
比如使用AWS CloudWatch监控指标、AWS Elastic Inference来提高推断性能,并使用Amazon SageMaker等服务来进行模型训练和部署。
小结:各个阶段
Amazon Deep Learning AMI的部署过程涉及以下几个关键阶段:
- 启动实例:选择合适的Amazon Deep Learning AMI镜像并启动实例。可根据项目需求选择不同类型的实例,如GPU实例以加速深度学习计算。
- 连接到实例:使用SSH或AWS Systems Manager Session Manager等工具连接到实例。这是与实例进行交互和上传代码的关键步骤。
- 设置环境:Amazon Deep Learning AMI已经预安装了许多深度学习框架和工具,但可能需要进一步设置环境,例如安装额外的Python库或配置环境变量。
- 运行代码:将TensorFlow代码上传到实例并运行,可以使用CPU或GPU来执行深度学习训练或推断任务。
- 监视性能:使用AWS CloudWatch等工具来监视实例的性能指标,以确保深度学习工作负载正常运行。还可以使用AWS服务来调整实例类型以获得更好的性能。
- 优化性能:根据性能监视结果,优化代码和模型,或者使用AWS Elastic Inference等服务来提高推断性能。
结论
TensorFlow是一个强大的深度学习框架,而Amazon Deep Learning AMI则是在云上部署和管理深度学习工作负载的理想选择。
本文介绍了TensorFlow的基本概念,以及如何在Amazon Deep Learning AMI中私有化部署TensorFlow代码。
实际上,AMI 还有更丰富的服务:
WorkflowServices显示在最上层,通过它们可以轻松地管理和扩展底层深度学习基础设施。
下一层Frameworks突出显示的是支持所有领先 深度学习框架的基础设施。
最下层Compute,Networkingand Storage显示的是计算、联网和存储服务示例,它们构成深度学习框架基础设施的基石。
通过掌握这些基本知识和步骤,你可以开始构建和训练深度学习模型!!冲冲冲~~