0

我希望能够entry_script.py在 VSCode 中调试正在运行的脚本。此代码在az ml deploy使用自己的 docker run 命令创建的容器中运行。这是一个本地部署,所以我使用的部署配置如下所示:

{
    "computeType": "LOCAL",
    "port": 32267
}

我正在考虑使用ptvsd来设置 VSCode 服务器,但除了端点本身的 32267 端口之外,我还需要公开/映射 5678 端口。所以我不清楚如何映射额外的暴露端口(通常使用命令中的-por-P标志docker run)。

当然,我可以EXPOSEextra_dockerfile_steps配置中使用它,但实际上不会将它映射到我可以在 VSCode 中连接/附加到的主机端口。

我试图确定运行命令并可能对其进行修改,但我找不到该运行命令是什么。如果我知道如何运行通过 AzureML 本地部署创建的映像,那么我可以修改这些标志。

最终感觉太老套了——如果有更受支持的方式通过az ml deploy或通过部署配置,那将是首选。

这是我在 entry_script 开头使用的代码,用于通过以下方式启用附件ptvsd

# 5678 is the default attach port in the VS Code debug configurations
print("Waiting for debugger attach")
ptvsd.enable_attach(address=('localhost', 5678), redirect_output=True)
4

2 回答 2

1

构建第二个 docker 文件:

FROM [YOUR_GENERATED_IMAGE]
EXPOSE [YOUR_PORT]

从文件夹中的 cmd 行:

docker build -t my_new_image .
docker run -p <port>:<port>  my_new_image

您可能需要添加额外的运行选项,具体取决于您需要的端口和环境变量等。

如何获取生成的图像名称:

 image = Image.create(workspace = az_ws, name=resolve_image_name(), models=[model], image_config = image_config)
image.wait_for_creation()
print("created image")
if(image.creation_state != "Succeeded"):
    raise Exception("Failed to create image.")
print("image location: {}".format(image.image_location))
artifacts = {"image_location" : image.image_location}
if(not os.path.exists("/artifacts/")):
    os.makedirs("/artifacts/")
with open("/artifacts/artifacts.json", "w") as outjson:
    json.dump(artifacts, outjson)
于 2019-08-26T14:45:31.997 回答
1

不幸的是 az ml deploy local 不支持绑定除托管评分服务器的端口之外的任何端口。

于 2019-08-21T20:27:54.223 回答