无法防止Azure函数Python冷启动

0 投票
1 回答
34 浏览
提问于 2025-04-12 16:57

我现在搞不清楚怎么才能在专用或高级计划中完全避免 Azure 函数的冷启动。我有一个机器学习的函数,它根据输入数据返回预测结果。我尝试过以下方法:

  • 使用 Python V2 模型,把所有代码放在同一个 .py 文件里(比如,把所有依赖一起加载)
  • 使用 warmupTrigger(这个也会调用预测函数,以便模型被加载和预热)
  • 交换 warmup 触发器(防止在交换时出现冷启动)
  • 健康检查,尝试不同的参数组合,比如 WEBSITE_HEALTHCHECK_MAXPINGFAILURESWEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT
  • 调整 FUNCTIONS_WORKER_PROCESS_COUNTPYTHON_THREADPOOL_THREAD_COUNT
  • 在预测时使用异步处理
  • 在高级计划中使用预热实例

我在函数应用脚本中添加了一个 UUID,这样每个 Python 工作进程都有一个我可以跟踪的 UUID。我使用的是 EP3 计划,有 4 个 Python 工作进程(FUNCTIONS_WORKER_PROCESS_COUNT=4),我发现 warmup 函数在扩展时只在 2 个工作进程上被调用。这意味着在另外 2 个没有预热的工作进程上,前几次调用需要 5-10 秒才能完成,这就是冷启动。

我还尝试把 FUNCTIONS_WORKER_PROCESS_COUNT 设置为 1,使用异步处理函数调用,然后把线程数设置为 4。不过,这样似乎没有达到预期效果,没能充分利用 vCPU 的能力,所以扩展效果不好。

我还能做些什么来完全避免在有多个 Python 工作进程的 Python Azure 函数中出现冷启动呢?我注意到有一个共享内存的预览功能,但不确定这是否能解决问题,或者还有其他什么方法可以尝试。

1 个回答

暂无回答

撰写回答