与Voila一起部署到Heroku

沃伊拉 是您初学者部署工作最快,最简单的方法之一。 它可以通过将Jupyter笔记本转换为类似于网页的方式来工作。

它是各种部署平台上的一个选项,其中之一是 Heroku。 Heroku为您提供了不同的选择 创建您的Web应用程序,包括Python,Ruby,PHP等适当的Web应用程序,但是在本指南中,我们仅打算创建一个 免费帐户,并使用Voila和Jupyter笔记本部署您的第一个模型。

先决条件

您应该有一个导出的模型和一个用作演示的Jupyter笔记本。 Fastai的第2章讨论了如何使用Jupyter小部件为分类器演示创建UI。您还需要一个 的GitHub 帐户,所以如果您还没有,请去注册。

创建您的GitHub存储库。你需要什么?

您的项目必须位于GitHub存储库中,因为我们要告诉Heroku从那里复制它,而部署演示的最简单方法是 一切 您的回购中需要(除非您开始接近最终将讨论的大小限制)。

回购中需要的最低金额如下:

  • yournotebook.ipynb
  • requirements.txt
  • 程序文件

但是,现在假设您将不会遇到任何尺寸问题,并且还包括:

  • 您的model.pkl
  • 您使用的任何其他文件(例如:使您的演示UI变得漂亮的图像)

requirements.txt

When you deploy your application, Heroku builds a server image, essentially one giant file that it can quickly copy onto a server when someone wants to run your app. All of the packages you need must be specified in your requirements.txt. That means all of the things you pip install at the top of your notebook should be moved to here (plus any packages you use which your particular platform makes available by default).

这里的一大难题是您应该在演示中使用仅Pytorch的CPU版本进行推理,因为GPU版本是 许多 更大,不超过500 MB的限制。

这是您的requirements.txt文件中应具备的最低要求(我假设您在用户界面中使用Jupyter小部件)。

//download.pytorch.org/whl/cpu/torch-1.6.0%2Bcpu-cp36-cp36m-linux_x86_64.whl
//download.pytorch.org/whl/cpu/torchvision-0.7.0%2Bcpu-cp36-cp36m-linux_x86_64.whl
fastai
voila
ipywidgets

NB: If you’re still using fastai version 1 you can use fastai==1.0.61 here instead.

程序文件

您的Procfile(过程文件)只需要包含1行,它告诉Heroku要创建哪种类型的应用程序。使用Voila时,有两种选择。

一个特定的笔记本(如果您现在只有一件事要部署,则需要此笔记本):

web: voila --port=$PORT --no-browser --enable_nbextensions=True yournotebook.ipynb

回购中的所有笔记本:

web: voila --port=$PORT --no-browser --enable_nbextensions=True

如果使用第一个选项并指定笔记本名称,则Heroku应用将自动加载并运行该笔记本。如果要同时托管多个演示,请使用第二个选项。如果执行此操作,那么当有人进入Heroku应用程序的根目录时,他们将仅看到他们可以单击运行的笔记本列表,但是如果您想更加吸引人,则可以始终提供一个名称明显的“主页”如README.ipynb或default.ipynb。

Heroku入门

现在,您已经在GitHub中拥有了所需的一切,然后将其放到Heroku中。

  • 在以下位置创建一个帐户 signup.heroku.com
  • 登录后,您将被带到 仪表板,点击 Create new app
  • 给它起个名字(这将是您的URL的一部分),选择离您最近的区域,然后单击 Create app
  • On the next screen ignore the pipeline section at the top, and under “Deployment method” choose 的GitHub and then click the purple Connect to 的GitHub button which appears underneath.
  • Once connected it will ask you for a repository to connect to. Enter your repo name here, click Search and then Connect
  • 然后,您应该看到标题为“连接到GitHub的应用程序”的部分,然后是2个部分,您可以在其中自动或手动部署特定分支之间进行选择。如果您是初学者,建议您自动部署master分支。这意味着,如果您在GitHub中对笔记本进行更改,它将自动更新您的Heroku应用。

If you choose automatic deployment or press the Deploy Branch button now you’ll see a build progress list as it gathers all of the libraries you need and compliles the server image we talked about earlier. Expect this to take a couple of minutes. Eventually you should see “//yourappname.herokuapp.com/ deployed to Heroku” and your app is now ready to share with the world.

500 MB“限制”限制

Heroku将最终“段”的大小(他们创建的服务器映像)限制为500 MB,其中包括您使用的所有库以及所有 依赖关系,因此您认为这是一个很小的项目,可能比您预期的更接近极限。

大多数基本的初学者项目都可以,但是如果您确实需要减小服务器映像的大小(尤其是一旦开始托管多个演示项目),则可以将模型导出(以及任何其他大文件)存储在Google云端硬盘或Dropbox上,或者类似的地方,然后从那里加载它们。

import urllib.request

MODEL_URL = "//drive.google.com/uc?export=download&id=YOUR_FILE_ID"
urllib.request.urlretrieve(MODEL_URL, "model.pkl")

learner = load_learner(Path("."), "model.pkl")

最后

不要忘记将您的工作发布在 论坛 在里面 在这里分享您的V2专案 线!