编程练习应用开发与模型部署

在数据科学生命周期中,部署机器学习模型并向同行及社区展示成果是最令人兴奋的部分。这不仅能让因完成的工作获得赞誉,而且更重要的是,能得到对最终产品的建设性反馈,从而改进它,让梦想——通过努力积极影响数百万人的生活——更接近现实。

在过去的几周里,一直在完成一个数据科学项目,将一个想法变为现实。试图为程序员创建一个名为“打字导师”的编程练习Web应用。本文围绕该应用背后的技术细节,介绍实现这个想法所需的技术栈。以下是使用Streamlit部署的项目演示。

项目的动机源于个人提高编码速度的经验。注意到打字速度不幸地比大多数同行慢。这可能是因为不断地在有线键盘和内置笔记本键盘之间切换。这激发了构建一个可以帮助练习打字速度的应用的想法。

现在有许多在线网站/免费工具专门用于提高打字速度。但很少有工具专注于程序员的打字速度。实际代码非常依赖于标点符号和语法正确性,这使得它比普通打字更难。

随着工具/语言的变化,语法也随之变化,这使得创建一个可靠的打字练习平台变得困难。这促使依赖深度学习动态生成代码,以便代码与用户日常工作中编写的代码相似。例如,如果用户是专门使用Python的数据科学家,生成的代码应该在他们/她将编写的代码范围内,等等。

如上所述,深度学习模型的需求来自于——生成与个人当前工作栈相似的代码,动态生成每次运行的代码以实现更全面的练习。这将确保用户获得他们所需的适当练习。

为了简化问题陈述,关于创建成功的数据科学产品,决定深度学习模型生成的代码可以语义上不正确,但仍然看起来语法正确。意思是,模型生成的代码如果运行,可能会产生垃圾输出,但至少应该在实际代码的边界内。

考虑到这一点,寻找了一个开源的预训练模型,该模型以代码作为输出,幸运地找到了Huggingface的预训练模型,由Congcong Wang训练。让简要解释这个模型是如何构建和工作的。

当给定一个输入序列时,理想情况下是任何函数的名称,模型返回可能属于该函数的代码作为输出,如上图所示。

更具体地说,该模型是一个微调的GPT-2序列到序列变换器模型,训练在The Algorithms项目上,这是一个在Python中实现的各种算法的集合,用于教育目的(注意——如果不熟悉深度学习中的序列到序列模型,可以查看这篇入门文章)。

这就是可以使用预训练模型生成代码的方式。

现在已经有一个适合目的的模型,下一步是构建用户将与之实际交互的用户界面。目前,想到了保持尽可能简单(如下所示)。

整体功能如下,当一个人打开网站并点击“开始”按钮时,计时器开始,模型开始其推理以生成代码。这段代码显示在网页的左侧面板上。然后为用户提供一个编码窗口,在右侧面板上,他们可以完全按照显示的内容重写代码。完成后,他们可以点击“检查速度”按钮以检查他们的打字速度和他们输入的内容的准确性。

为此,使用了streamlit作为创建简单用户界面的工具,并将其连接到模型作为后端。

现在基本功能已经准备好了,下一步是设置按钮的内部工作。如上所述,点击“开始”按钮时,计时器开始,模型开始其推理以生成代码。点击“检查速度”按钮时,计算他们的打字速度和他们输入的内容的准确性。

现在已经准备好了基本功能,下一步是检查它是否按预期工作。为此,设置了google Colab系统作为开发环境。

在模型可以推向生产之前,必须完全确定整体代码对于新用户不会崩溃。这包括但不限于编写模块化面向对象格式的代码并测试每个模块,必要时记录代码,分析UI元素的响应时间并确保它们在限制内,检查网站的总体UI/UX等。

为此,像google Colab这样的开发环境为生产系统提供了充足的替代品,以便可以评估代码并在需要时进行修改。为了简单起见,这是可以在Google Colab上轻松下载的完整代码。

现在要运行为UI和后端与streamlit创建的代码,只需将代码保存为app.py文件,上传到一个新的google Colab笔记本并在新单元格中运行以下命令即可。

!streamlit run app.py &>/dev/null&

另外,由于google colab并不直接提供streamlit应用的访问,需要使用Ngrok创建到应用的隧道。

from pyngrok import ngrok public_url = ngrok.connect(port='8501') public_url

现在可以使用Google Colab作为模型的临时托管服务。

一旦确信程序按预期工作,可以使用AWS将其部署为永久可访问的网站。更详细的步骤在这里给出,但有两个重要步骤需要记住,选择适当的AMI——对于情况,需要一个ubuntu 18.04 CPU实例。理想地可以依赖于一个预装了Nvidia CUDA和PyTorch的深度学习AMI,但这将是一个更昂贵的选择。

向AWS实例添加TCP规则——与google colab类似,直接访问streamlit应用并不直接可用,所以必须创建规则。现在AWS实例已经启动,可以ssh进入它并复制代码,使用命令启动streamlit应用。

streamlit run app.py

如果看到,模型在技术上已经部署在AWS上,但得到的web链接是“172.181.32.41:8501”,这是一个与用户分享时不太直观的名称。理想情况下,会想要一个永久的网站,可以在其中分享项目的全部荣耀。为此,从技术上讲,需要做一些中间步骤。

创建/购买一个托管网站的域名(服务使用——BigRock + Cloudflare),托管一个Web服务器并将其连接到网站作为一个HTTPS网站(服务使用——Nginx + CertBot),永久在后台运行Streamlit应用(工具使用——Tmux)。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485