Botframework Orchestrator多语言模型部署Azure Sites报内存分配错误
问题更新
该问题似乎仅出现在被重命名为model.onnx的pretrained.20210205.microsoft.dte.00.06.unicoder_multilingual.onnx预训练模型上,若使用英文模型则运行一切正常。
问题描述
请问是否有人成功将替代NLP Dispatch的新版Orchestrator部署到Azure Sites上运行?我参照迁移示例操作后,本地使用模拟器或ngrok运行均正常,但部署到Azure Sites后无法读取模型。
报错日志
EXCEPTION THROWN - utility_onnx::OnnxUtility::InitOnnxSession(): e.what()=Load model from D:\home\site\wwwroot\CognativeModels\model\model.onnx failed:bad allocation, FILE=D:\a\1\s\oc\utility\OnnxUtility.h, LINE=117 EXCEPTION THROWN - OC - EmbedderBase::EmbedderBase(json const& config, const string onnxVocabFileDefault, const string onnxModelFileDefault): e.what()=Load model from D:\home\site\wwwroot\CognativeModels\model\model.onnx failed:bad allocation, FILE=D:\a\1\s\oc\EmbedderBase.cc, LINE=57 fail: Microsoft.Bot.Builder.Integration.AspNet.Core.BotFrameworkHttpAdapter[0] [OnTurnError] unhandled error : Failed to find or load Model with path D:\home\site\wwwroot\CognativeModels\model System.InvalidOperationException: Failed to find or load Model with path D:\home\site\wwwroot\CognativeModels\model ---> System.ApplicationException: Load model from D:\home\site\wwwroot\CognativeModels\model\model.onnx failed:bad allocation at Microsoft.BotFramework.Orchestrator.Orchestrator..ctor(String baseModelConfigOrPath) at Microsoft.Bot.Builder.AI.Orchestrator.OrchestratorRecognizer.b__39_0(String path) --- End of inner exception stack trace --- at Microsoft.Bot.Builder.AI.Orchestrator.OrchestratorRecognizer.b__39_0(String path) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at Microsoft.Bot.Builder.AI.Orchestrator.OrchestratorRecognizer.InitializeModel() at Microsoft.Bot.Builder.AI.Orchestrator.OrchestratorRecognizer.RecognizeAsync(DialogContext dc, Activity activity, CancellationToken cancellationToken, Dictionary`2 telemetryProperties, Dictionary`2 telemetryMetrics) at SSC.Chatbot.QnABot`1.OnMessageActivityAsync(ITurnContext`1 turnContext, CancellationToken cancellationToken) in D:\a\1\s\Bots\QnABot.cs:line 121 at Microsoft.Bot.Builder.ActivityHandler.OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken) at SSC.Chatbot.QnABot`1.OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken) in D:\a\1\s\Bots\QnABot.cs:line 97 at Microsoft.Bot.Builder.TelemetryLoggerMiddleware.OnTurnAsync(ITurnContext context, NextDelegate nextTurn, CancellationToken cancellationToken) at Microsoft.Bot.Builder.Integration.ApplicationInsights.Core.TelemetryInitializerMiddleware.OnTurnAsync(ITurnContext context, NextDelegate nextTurn, CancellationToken cancellationToken) at Microsoft.Bot.Builder.BotFrameworkAdapter.TenantIdWorkaroundForTeamsMiddleware.OnTurnAsync(ITurnContext turnContext, NextDelegate next, CancellationToken cancellationToken) at Microsoft.Bot.Builder.MiddlewareSet.ReceiveActivityWithStatusAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken) at Microsoft.Bot.Builder.BotAdapter.RunPipelineAsync(ITurnContext turnContext, BotCallbackHandler callback, CancellationToken cancellationToken)
核查情况
已在Azure门户中确认报错路径下的模型文件真实存在,相关凭证截图:
可行解决方案
- 升级Azure App Service定价层:多语言Unicoder模型体积约1.8GB,加载时需额外预留2~3GB运行内存,免费层/F1/B1层可用内存不足以支撑加载,英文模型体积更小所以可正常运行,建议至少升级到B2及以上配置。
- 切换为64位运行时:进入Azure门户→App Service配置→常规设置,将平台设置为64位,关闭32位应用开关,多语言ONNX模型仅支持64位运行时加载。
- 调整模型加载逻辑:改为首次调用时异步懒加载模型,不要在应用启动阶段同步加载,避免启动时内存占用过高触发Azure进程回收机制。
- 检查配套文件完整性:确认模型对应vocab词汇表文件也同步上传到模型同目录下,不要仅上传.onnx单个模型文件。
- 替代部署方案:如果业务必须使用多语言模型且不想升级App Service配置,可将Orchestrator服务托管到Azure Functions弹性Premium计划(EP2及以上)或者Azure容器实例中运行,内存限制更宽松。
内容的提问来源于stack exchange,提问作者nephinj
相关产品推荐
相关产品推荐

