无法防止Azure函数Python冷启动
我现在搞不清楚怎么才能在专用或高级计划中完全避免 Azure 函数的冷启动。我有一个机器学习的函数,它根据输入数据返回预测结果。我尝试过以下方法:
- 使用 Python V2 模型,把所有代码放在同一个 .py 文件里(比如,把所有依赖一起加载)
- 使用 warmupTrigger(这个也会调用预测函数,以便模型被加载和预热)
- 交换 warmup 触发器(防止在交换时出现冷启动)
- 健康检查,尝试不同的参数组合,比如
WEBSITE_HEALTHCHECK_MAXPINGFAILURES
和WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT
- 调整
FUNCTIONS_WORKER_PROCESS_COUNT
和PYTHON_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 个回答
暂无回答