Docker与Visual Studio Code在机器学习中的应用

机器学习和人工智能领域,容器化技术如Docker提供了一种便捷的方式来打包、分发和运行应用程序。本文将探讨如何在Visual Studio Code中使用Docker来调试机器学习服务。

设置Visual Studio Code

Visual Studio Code(VS Code)是一个轻量级且灵活的代码编辑器,支持Windows、macOS和Linux平台。它的可扩展性使得它能够支持众多语言和技术。本文假设已经熟悉VS Code,并准备使用它来运行和调试Python服务。首先,需要安装三个扩展:

在VS Code中,通过扩展市场搜索并安装以下三个扩展:

  • Python
  • Docker
  • Remote - Containers

容器配置

将使用与之前相同的Dockerfile和几乎相同的docker-compose.yml文件。唯一的变化是引入了新的镜像名称,以保持文章和镜像名称之间的一一对应关系。

version: '3.7' volumes: mluser_cache: name: mluser_cache services: mld09_transformers_api_debug: build: context: '.' dockerfile: 'Dockerfile' args: USERID: ${USERID} image: 'mld09_transformers_api_debug' volumes: - mluser_cache:/home/mluser/.cache ports: - '8000:8000' user: '${USERID}:${GROUPID}'

配置项目以在Docker中工作

现在,需要指导VS Code如何运行容器。通过在.devcontainer文件夹中添加两个新文件来实现这一点(注意文件夹名称前的点)。

第一个文件docker-compose-overwrites.yml定义了想要在通过VS Code工作时添加或更改的docker-compose.yml的部分。因为在开发过程中想要编辑本地代码,所以需要一个新的卷来映射本地文件到容器的文件夹。此外,想要覆盖命令语句,因为在这种情况下不想总是随着容器的启动而启动服务。相反,想要一个无限循环来保持容器存活。这导致得到以下docker-compose-overwrites.yml:

version: '3.7' services: mld09_transformers_api_debug: volumes: - .:/home/mluser/workspace:cached command: /bin/sh -c " while sleep 1000; do :; done" { "name": "Inference Service NLP Debug Container", "dockerComposeFile": [ "../docker-compose.yml", "docker-compose-overwrites.yml" ], "service": "mld09_transformers_api_debug", "workspaceFolder": "/home/mluser/workspace", "settings": { "terminal.integrated.shell.linux": null }, "extensions": [ "ms-python.python" ], "forwardPorts": [ 8000 ], "remoteUser": "mluser" }

大多数选项都是相当直观的。在其他事项中,定义了要加载的docker-compose文件(以及加载顺序)。在workspaceFolder属性中,定义了哪个容器的文件夹将被VS Code实例作为其工作区打开。extensions属性确保安装Python扩展,这将允许调试代码。文件最后列出了要转发到主机的端口,以及选择运行容器的用户名称。

启动容器

可能还记得,当将本地文件夹映射为容器的卷时,需要正确匹配本地用户和容器的用户。当在Windows和macOS上使用容器时,VS Code会尝试为自动执行此操作,如所述。

在Linux上,仍然需要自己处理它。将通过在启动VS Code环境时设置所需的环境变量来做到这一点:

$ USERID=$(id -u) GROUPID=$(id -g) code .

请从包含项目Dockerfile的文件夹中执行此操作。

现在已经准备好启动容器了。要做到这一点,请点击左下角的“Open a remote window”按钮:

然后从下拉菜单中选择“Reopen in Container”选项:

然后...就是这样。现在等待镜像被构建,容器启动,VS Code在其中安装所有依赖项。

当工作完成后,得到了一个标准的工作区视图。唯一确保真的“在”容器内的方法是验证终端窗口中可见的路径和左下角的Dev Container名称:

在容器中调试代码

现在可以像在本地一样使用应用程序,包括调试。

至少有两种方法可以调试FastAPI服务。第一种方法是将代码添加到main.py脚本中,以直接启动开发服务器。第二种方法需要为Uvicorn服务器模块定义一个专用的调试配置。

if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)

有了这个变化,只需使用默认的Python: Current File调试配置来运行代码。

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