Jupyter Deploy:在云端快速创建支持实时协作的JupyterLab应用
Jupyter notebooks已成为数据科学家、研究人员、教育工作者和分析师进行代码实验、数据可视化和文档记录的热门工具。许多用户在笔记本电脑上运行Jupyter,但这给分布式团队协作带来了限制,因为用户无法安全地通过互联网直接访问其本地JupyterLab应用。同样,用户也受限于自身设备的计算能力。如果工作负载需要更多计算资源,例如需要GPU加速器来微调深度学习模型,则需要不同的设置。
大型企业可以负担工程师团队来设置和维护支持分布式计算的部署框架或托管服务,但对于初创公司或研究团队等小型组织来说,这超出了其资源范围。
Jupyter Deploy简介
今天,AWS的AI/ML开源团队很高兴分享Jupyter Deploy的可用性:一个新的开源命令行界面(CLI),可在几分钟内将Jupyter部署到云端。Jupyter Deploy为您提供一个在自有域上运行的专用可共享应用,具有加密HTTP(TLS)、GitHub OAuth集成、实时协作以及基于UV的高性能开发环境,用于应用更新和进一步配置应用。CLI利用基础设施即代码(IaC)让您使用配置文件定义和管理资源,而不是通过Web控制台进行手动设置。
通过几个Jupyter Deploy CLI命令,您可以设置一个基础设施即代码项目,配置它,并使用它来创建和管理云资源。第一步包括选择一个Jupyter Deploy模板。模板是预构建的基础设施即代码项目,为您处理技术设置。
Jupyter Deploy CLI附带一个基础模板,包含terraform基础设施即代码引擎、AWS云提供商、Amazon Elastic Compute Cloud(Amazon EC2)实例和GitHub身份验证。
Jupyter Deploy如何简化协作
将JupyterLab应用部署到新的Amazon EC2实例后,您可以像在本地笔记本电脑上运行Jupyter一样从Web浏览器访问它。但与本地运行的JupyterLab不同,您还可以将其URL分享给其他人。当协作者将URL粘贴到自己的Web浏览器中时,系统将提示他们通过GitHub进行身份验证。如果其身份与您的允许列表匹配,他们将获得对JupyterLab应用的访问权限,并且得益于Jupyter的实时协作功能,您可以同时工作。
需要更多计算资源?从Jupyter Deploy项目目录运行几个命令即可更换实例。Amazon EC2提供广泛的实例类型:例如,您可以将计算优化实例用于CPU密集型数据科学项目,或将GPU实例用于深度学习。
另一个协作者需要访问您的应用?另一个简单命令即可处理!添加更多存储也是如此;您可以通过几个jupyter-deploy命令挂载新的Amazon Elastic Block Store(Amazon EBS),扩展现有存储,或挂载新的或现有的Amazon Elastic File System(Amazon EFS)。
如何使用Jupyter Deploy
首次设置过程涉及五个主要步骤:配置AWS、获取域、设置GitHub身份验证、安装工具和部署环境。您可以重复使用域、AWS账户、GitHub应用进行未来部署。
设置AWS账户和本地AWS凭证
如果您没有AWS账户,可以利用AWS免费套餐计划设置Jupyter Deploy项目。接下来,在环境中安装AWS命令行界面(AWS CLI)并配置AWS CLI以访问您自己的AWS账户。
运行以下命令确认设置,验证AWS凭证是否正确工作:
|
|
在Amazon Route 53上购买域
接下来,打开AWS控制台,使用电子邮件和密码登录,并导航到Amazon Route 53。Amazon Route 53是管理域名系统(DNS)操作的AWS服务。Amazon Route 53允许您将DNS记录(如amazon.com这样的全局地址)与基础模板将为您设置的Amazon EC2实例的IP地址关联。
要在本文中执行步骤,您需要拥有一个域并能够使用Amazon Route 53创建DNS记录。如果您不拥有域,可以从Amazon Route 53控制台以每年不到20美元的价格购买一个。
设置GitHub OAuth应用
下一步是设置GitHub OAuth应用。Jupyter Deploy将通过引用您GitHub账户中的此GitHub应用来配置您的Amazon EC2实例,将用户重定向到GitHub进行身份验证。
详细信息:
- 应用名称:输入JupyterLab application(或任何名称)
- 主页URL:输入您的https://jupyter.{您的域}
- 应用描述:输入jupyter.{您的域}或留空
- 授权回调URL:输入https://jupyter.{您的域}/oauth2/callback
现在您的GitHub OAuth应用已配置,您应该能够在开发者设置页面上看到它。当您打开它时,会看到它有Client ID和Client Secret。记下Client ID,然后生成secret并保存其值,我们稍后需要两者。
创建Python环境并安装Jupyter Deploy
接下来,让我们启动jupyter-deploy项目。我们将创建一个Python虚拟环境,将jupyter-deploy项目的依赖项与系统其余部分分开。我们将使用UV来实现。
步骤:
- 打开终端,导航到主目录:
cd ~ - 创建UV项目:
uv init jupyter-deploy-projects --bare - 安装Jupyter Deploy CLI:
uv add jupyter-deploy - 激活环境:
source .venv/bin/activate - 运行
jupyter-deploy --help
初始化项目
类似于uv,Jupyter Deploy CLI为您设置项目:
- 在终端中,为项目创建新目录:
mkdir jupyterlab-on-ec2 - 更改目录:
cd jupyterlab-on-ec2 - 然后运行
jupyter-deploy init
这将生成以下项目脚手架:
|
|
使用Jupyter Deploy的交互式体验配置项目
现在该配置您的项目了。您需要准备:
- 您的域
- 您的GitHub OAuth应用Client ID
- 您的GitHub OAuth应用Client secret
- 您的GitHub用户名
运行jupyter-deploy config -s验证安装,并提示您安装所需工具,如terraform、AWS CLI、jq以及特定模板可能需要的其他工具。
模板使用Lets Encrypt生成TLS证书,以便到JupyterLab应用的流量端到端加密。
您现在将进入交互式体验。CLI将提示您为此模板的每个必需变量选择值。
如果出错,运行jupyter-deploy config --<variable-name> VAR_VALUE
创建云资源
现在是实际创建云资源的时候了。运行以下命令:jupyter-deploy up
这里terraform接管,并为您准备部署。基础设施即代码是一项技术,使您能够基于声明性文件创建和管理多个相互依赖的云资源。
Terraform准备计划,并显示它将使用您的AWS凭证在您的AWS账户中创建的资源。出现提示时输入yes。
打开应用
现在,您的基础设施已准备就绪,并在我们指定的sub-domain.domain上为您的应用提供服务。
使用jupyter-deploy open访问它。
添加协作者并分享notebook URL
接下来,让我们开始在此应用上协作。向您想要协作的人询问他们的GitHub用户名。然后从jupyter-deploy项目目录运行以下命令:
|
|
您应该只看到自己的GitHub用户名。
现在使用以下命令添加协作者的用户名:
|
|
再次运行jupyter-deploy users list验证应用已更新。
然后将您的应用URL提供给协作者。只有您的协作者可以访问您的应用,因此您不需要采取措施保护此URL。
停止实例以节省云费用
在工作日结束时,您可能希望关闭Amazon EC2实例并节省AWS账单或免费套餐额度。您可以使用简单的jupyter-deploy命令为jupyter-deploy项目执行此操作。
|
|
升级实例
基础模板使用t3.medium作为默认Amazon EC2实例类型。这是简单工作负载的推荐实例,但如果工作负载需要更多CPU或内存,您可能会遇到容量限制。
这就是基础设施即代码真正帮助的地方;通过更新声明文件中的一个字符串,我们可以重新应用项目并改变现有基础设施。jupyter-deploy使这更容易,您只需运行:
|
|
然后:
|
|
挂载额外的Amazon EBS卷或Amazon EFS文件系统
您可以轻松创建或关联现有存储卷或文件系统到为JupyterLab应用提供服务的Amazon EC2实例。使用config命令的--additional-ebs-mounts选项创建或重用Amazon EBS卷,并将它们挂载到JupyterLab应用的主目录下。