机器学习 (ML) 本质上是高度迭代和复杂的,需要数据科学家探索解决业务问题的多种方法。数据科学家必须使用支持交互式实验的工具,以便可以运行代码、检查其输出并对其进行注释,从而轻松地与其他团队成员合作。
SageMaker Studio 是一个完全集成的 ML 开发环境 (IDE)。它提供了一个基于 Web 的可视化界面,可以在其中执行构建、训练、调整、调试、部署和监控模型所需的所有 ML 开发步骤。它为数据科学家提供了将 ML 模型从实验转变为生产所需的所有工具,而无需离开 IDE。
Studio Notebook
是可以快速启动的 Jupyter 笔记本。底层计算资源是完全弹性的,因此可以轻松地增加或减少可用资源,并且更改会在后台自动发生,而不会中断工作。还可以通过单击几下与其他人共享笔记本。他们得到完全相同的笔记本,并保存在同一个地方。
我们将仔细介绍Studio Notebook
是如何设计来提高数据科学家和开发人员的工作效率的。
我们首先了解一下 Jupyter Notebook
是如何设置和访问的,Jupyter 笔记本默认托管在单台计算机上,可以通过任何 Web 浏览器访问。下图说明了在EC2上设置时它的工作原理。
通过打开浏览器并输入 Jupyter 服务器的 URL 来访问 Jupyter 笔记本,这会对托管 Jupyter 服务器的计算机进行 HTTPS/WSS
调用。该机器运行一个笔记本服务器,该服务器接收请求并使用Zeromq
与内核进程进行通信。
尽管这种架构很好地满足了数据科学家的需求,但一旦团队开始增长并且机器学习工作负载转移到生产环境,就会出现新的需求。这包括以下内容:
Studio 及其组件之一 Studio Notebook就是为了满足此类要求而构建的。Studio IDE 旨在统一 ML 开发所需的所有工具。开发人员可以在一个集成的可视化界面中编写代码、跟踪实验、可视化数据以及执行调试和监控,这显著提高了开发人员的工作效率。
Studio Notebook
的设计架构如下:
Studio domain
基于EFS 卷,并将安全、网络等相关的配置进行聚合。Domain促进用户之间的协作,他们可以与同一Domain中的其他用户共享笔记本和其他组件。
添加到 Studio Domain
的每个用户都由一个用户配置文件(user profile)
表示。此User Profile
包含有关域中用户的唯一信息,例如用户的执行角色、EFS 卷中用户的Posix ID
等。
SageMaker image
引用 Docker 容器映像的元数据,存储在ECR中,通常包含 ML/DL
框架库和运行内核所需的其他依赖项。
Studio 附带了几个预构建的镜像(pre-build image)
。它还可以将自己的镜像附加到 Studio Domain
,自定义镜像需要存储在 ECR 中。可以选择将自定义镜像附加到整个域或特定用户的User Profile配。有关更多信息,请参阅SageMaker 自定义映像示例
和将您自己的自定义容器映像引入 SageMaker Studio 笔记本
。
App是为域中的用户运行的应用程序,以 Docker 容器的形式实现。Studio 目前支持两种类型的应用程序:
JupyterServer – JupyterServer app
运行 Jupyter 服务器。每个用户都有一个在域内运行的独特且专用的 JupyterServer App
。
KernelGateway – KernelGateway app
对应于正在运行的 SageMaker容器。每个用户可以在单个 Studio 域中同时运行多个 KernelGateway app
。
当用户使用 Web 浏览器访问 Studio UI 时,会与Notebook Server
建立 HTTPS/WSS
连接,该服务器在 JupyterServer 容器内运行,而 JupyterServer 容器又在EC2 实例上运行。
Studio 使用 KernelGateway 架构允许Notebook server
与远程主机上运行的内核进行通信;因此,Jupyter 内核不在Notebook Server
所在的主机上运行,而是在单独主机上的 Docker 容器中运行。
每个用户只能运行一个给定类型(例如ml.t3.medium
)的实例,每个实例上最多可以分配四个app;用户可以使用每个app生成多个笔记本和终端。如果需要在同一实例上运行四个以上应用程序,可以选择在不同类型的底层实例上运行。例如,可以选择在同一实例上运行 TensorFlow、PyTorch、MxNet、Data Science KernelGateway
应用程序,并分别运行多个笔记本;如果需要运行其他自定义应用程序,可以在不同的实例上启动它。
主机上运行的app之间不强制实施资源限制,因此每个app能够在给定时间占用所有计算资源。
每个app中可以运行多种内核类型,前提是所有内核在 CPU 或 GPU 上运行时具有相同的硬件要求。例如,除非在域或User Profile
中进行了不同指定,否则 CPU 内核默认在 ml.t3.medium
上运行,GPU 内核在 ml.g4dn.xlarge
上运行,可以根据需要选择不同的计算资源。
如果Notebook需要更多计算和内存,还可以更改这些实例类型。在 Studio 中打开笔记本时,它会显示运行该笔记本的 EC2 实例(以黄色突出显示)的 vCPU 和内存:
可以选择不同的实例类型:
有些实例是快速启动类型,有些则不是。快速启动类型是将机器提前准备好了一个池子,以提供快速启动体验。
此外,如架构图所示,共享EFS 卷已安装到所有 KernelGateway
和 JupyterServer app
。
除了使用Notebook和在具有内核的Notebook中交互式运行代码之外,还可以与JupyterServer app(system terminal)
和 KernelGateway app(image terminal)
建立终端会话。前者在安装Notebook server
扩展或运行文件系统操作时可能很有用, 后者用于在容器中安装特定库或从命令行运行脚本。
以下显示了在 KernelGateway app
上运行的终端会话,以及在 ml.t3.medium
实例上运行的 Python3内核。
从截图中,我们可以看到已安装的 EFS 卷(以黄色突出显示)以及附加到容器的临时存储的EBS卷(以绿色突出显示)。我们可以看到,EFS 卷高达 8 EB,EBS 存储大小约为 83 GB,其中已使用约 11 GB。
以下截图显示了系统终端。同样,使用EFS 卷(以黄色突出显示)和 EBS 卷(以绿色突出显示)安装了不同的卷:
EFS 卷与image terminal
上的卷相同。但是,此处的EFS 卷挂载点与 KernelGateway 容器的挂载点不同。此处,在总共 83 GB 的 EBS 卷大小中,已使用 9 GB。
从存储角度来看,每个用户都可以在域下的EFS 卷上创建自己的私有主目录。对于每个用户,Studio 自动关联一个唯一的POSIX user/group ID
(UID/GID),以确保他们只能访问自己的目录。文件系统会自动安装到Notebook server
容器和所有KernalGateway
容器,如上一节所示。
Studio 的EFS 文件系统也可以由不同的客户端挂载:例如,可以将文件系统挂载到 EC2 实例并在主目录上运行漏洞扫描。以下显示了相关的API 调用,返回有关已安装的 EFS ID
的详细信息:
使用相同的 EFS ID在 EC2 实例上挂载文件系统 。挂载成功后,我们还可以验证该卷的内容。以下显示了安装在 EC2 实例上的 Studio EFS 卷的内容:
Studio 还使用S3来存储Notebook快照和元数据以实现Notebook共享。除此之外,当在 Studio 中打开Notebook时, EBS 卷会附加到运行Notebook的实例。如果删除实例上运行的所有应用程序, EBS 卷将被删除。
可以使用KMS CMK加密 EFS 和 EBS 卷。有关详细信息,请参阅使用加密保护静态数据 。
默认情况下,Studio 使用两个不同的 Virtual Private Cloud ( VPC),其中一个 VPC 由 Studio 本身控制,并对公共互联网流量开放。另一个 VPC 由用户指定,并启用 Studio Domain和 EFS 卷之间的加密流量。有关更多详细信息,请参阅使用私有 VPC 保护 SageMaker Studio 连接 。
Studio 使用run-as POSIX user/group
来管理 JupyterServer app和 KernelGateWay app。JupyterServer app用户以sagemaker-user
身份运行,具有 sudo 权限以启用 yum 软件包的安装,而 KernelGateway app用户以 root 身份运行,可以执行 pip/conda
安装,但都无法访问主机实例。除了默认run-as
用户之外,容器内的用户还映射到Notebook实例上的非特权用户 ID 范围, 这是为了确保用户无法升级权限以超出容器并在 EC2 实例中执行任何受限操作。有关更多详细信息,请查看访问控制和 SageMaker Studio 笔记本
。
此外,SageMaker 添加了特定的路由规则来阻止从容器向 EFS 和IMDS发出请求,并且用户无法更改这些规则。Studio 中的所有网络间流量均经过 TLS 1.2 加密,禁止某些节点内流量,例如分布式训练或处理作业中的节点之间的通信以及服务控制平面与训练实例之间的通信。
使用 Studio Notebook时,需要支付计算和存储费用。
存储费用:Notebook和相关项目(例如数据文件和脚本)将保留在 EFS 上。有关存储费用,请参阅EFS 定价。
计算费用:在 Studio 域中,添加用户时,会为该用户启动 JupyterServer app,从而在浏览器中访问 Studio UI。此 JupyterServer app不向用户收费,仅针对底层 EFS 存储收费。用户可以继续使用 Studio UI 进行文件浏览、阅读Notebook以及访问 Studio 中的System terminal
和其他 UI 组件,而不会产生任何计算成本。仅当用户选择用于Notebook的Kernel时,才会开始收取计算费用。
当用户关闭 EC2 实例上最后一个运行的 KernelGateway app时,该实例将自动关闭,并且 EC2 实例的计费将停止。因此,建议用户关闭任何未使用的 KernelGateway app,以避免产生意外费用。还可以使用Sagemaker-Studio-Autoshutdown 扩展自动关闭空闲内核**。**
总结:Studio Notebook
使用松散耦合的 KernelGateway 架构模式来实现可扩展性和灵活性,并为在同一Studio Domain中工作的每个用户提供强大的隔离功能,安全控制也到位,以避免用户发生任何意外操作。