深度学习生产环境搭建与系统设计指南

部署运行你感兴趣的模型镜像

从研究到生产

在这个系列文章中,我们的目标非常简单。我们将从一个包含原型深度学习代码的Colab笔记本开始,逐步部署和扩展它以服务数百万用户。

我们将逐步探索以下概念和想法:

  • 如何构建和开发生产就绪的机器学习代码
  • 如何优化模型的性能和内存需求
  • 如何通过在云上设置小型服务器使其对公众可用

但这还不是全部。之后,我们需要扩展服务器以处理不断增长的用户流量。

深度学习环境设置

操作系统和终端

使用Ubuntu 20.04作为操作系统和标准Linux终端。建议安装zsh代替bash,因为它具有行完成、拼写纠正、命令历史等酷炫功能。

Git和Github

Git是一个开源版本控制系统,对于与其他开发人员在相同代码上协作至关重要。

安装和配置Git的命令:

sudo apt-get install git
git config --global user.name "AI Summer"
git config --global user.email "sergios@theaisummer.com"

设置SSH密钥以从终端提交和推送代码:

ssh-keygen -t rsa -C "your_name@github.com"
cat ~/.ssh/id_rsa.pub

Anaconda和Miniconda

为了将深度学习环境与系统其余部分隔离,虚拟环境是解决方案。Miniconda版本仅包含必要的内容。

安装命令:

wget https://repo.anaconda.com/miniconda/Miniconda2-latest-Linux-x86_64.sh
./sh Miniconda2-latest-Linux-x86_64.sh

Pycharm

Pycharm提供开箱即用的功能,如与git和conda的集成、单元测试以及云代码和bash支持等插件。

创建项目时,Pycharm会要求选择Python解释器。在此步骤中,可以选择创建新的conda环境,IDE将找到conda安装并自动创建一个。

其他工具

  • Slack:与团队沟通的非常好的工具
  • Zenhub:专为Github设计的项目管理工具
  • Zoom:视频通话和会议

深度学习的系统设计

高级架构

假设我们有一个网站,出于某种原因想在该页面上添加图像分割功能。用户将导航到该页面,单击按钮上传图像,然后我们在执行分割后显示结果。

在软件方面,流程是这样的:用户将图像上传到浏览器,浏览器将图像发送到我们的后端,UNet预测分割后的图像,我们将图像发送回用户的浏览器,在那里进行渲染。

软件设计原则

每个系统都应基于一些基本原则构建:

  • 关注点分离:系统应模块化为不同的组件,每个组件都是独立可维护、可重用和可扩展的实体
  • 可扩展性:系统需要能够随着流量增加而扩展
  • 可靠性:即使出现软件或硬件故障,系统也应继续运行
  • 可用性:系统需要始终继续运行
  • 简单性:系统必须尽可能简单直观

系统组件

  • 负载均衡器:处理流量并将请求路由到适当的服务器实例
  • 模型实例:维护多个模型实例以实现可扩展性和可用性
  • 数据库:保存请求、响应和所有相关数据
  • 消息队列:以异步方式将它们发送到数据库
  • 数据作业:预处理数据并将其转换为正确格式
  • 重新训练实例:基于保存的数据执行实际训练
  • 监控和日志记录:全面了解系统中发生的情况

准备软件工程

在本文中,我给了你两个主要任务在等待下一篇文章时完成:

  1. 设置笔记本电脑并安装在整个课程中需要的工具
  2. 理解现代深度学习系统的原因

第一个是低努力、有点无聊的工作,将提高你的生产力并在以后节省一些时间,这样我们可以只关注软件。第二个需要一些脑力劳动,因为深度学习架构是相当复杂的系统。

# 示例代码:UNet模型定义
base_model = tf.keras.applications.MobileNetV2(input_shape=[128, 128, 3], include_top=False)

layer_names = [
    'block_1_expand_relu',   # 64x64
    'block_3_expand_relu',   # 32x32
    'block_6_expand_relu',   # 16x16
    'block_13_expand_relu',  # 8x8
    'block_16_project',      # 4x4
]

layers = [base_model.get_layer(name).output for name in layer_names]
down_stack = tf.keras.Model(inputs=base_model.input, outputs=layers)
down_stack.trainable = False

up_stack = [
    pix2pix.upsample(512, 3),  # 4x4 -> 8x8
    pix2pix.upsample(256, 3),  # 8x8 -> 16x16
    pix2pix.upsample(128, 3),  # 16x16 -> 32x32
    pix2pix.upsample(64, 3),   # 32x32 -> 64x64
]

def unet_model(output_channels):
  inputs = tf.keras.layers.Input(shape=[128, 128, 3])
  x = inputs

  # 通过模型下采样
  skips = down_stack(x)
  x = skips[-1]
  skips = reversed(skips[:-1])

  # 上采样并建立跳跃连接
  for up, skip in zip(up_stack, skips):
    x = up(x)
    concat = tf.keras.layers.Concatenate()
    x = concat([x, skip])

  # 这是模型的最后一层
  last = tf.keras.layers.Conv2DTranspose(
      output_channels, 3, strides=2,
      padding='same')  # 64x64 -> 128x128

  x = last(x)
  return tf.keras.Model(inputs=inputs, outputs=x)

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值