如何在 Service Fabric 应用程序中运行 pythonnet (Keras.Net)?

我想使用Keras.Net在 C# 中运行经过 Python 训练的 ML 模型,但在 Service Fabric 应用程序中执行此操作时遇到问题。我正在主机上运行 Service Fabric 本地群集。我还在这台主机上安装了 python。在主机上的 C# 控制台应用程序中运行 Keras.Net 代码似乎工作正常,但在主机上的 SF 应用程序中运行相同的代码时出现以下错误:

System.AggregateException: One or more errors occurred. (One or more errors occurred. (Unable to load DLL 

'python38' or one of its dependencies: The specified module could not be found. (0x8007007E)))

---> System.AggregateException: One or more errors occurred. (Unable to load DLL 'python38' or one of its dependencies: The specified module could not be found. (0x8007007E))

---> System.DllNotFoundException: Unable to load DLL 'python38' or one of its dependencies: The specified module could not be found. (0x8007007E)

    at Python.Runtime.Runtime.Py_IsInitialized()

    at Python.Runtime.Runtime.Initialize(Boolean initSigs)

    at Python.Runtime.PythonEngine.Initialize(IEnumerable1 args, Boolean setSysArgv, Boolean initSigs)

    at Python.Runtime.PythonEngine.Initialize(Boolean setSysArgv, Boolean initSigs)

    at Python.Runtime.PythonEngine.Initialize()

    at Keras.Keras.InstallAndImport(String module)

    at Keras.Keras.c.b__27_0()

    at System.Lazy1.ViaFactory(LazyThreadSafetyMode mode)

    at System.Lazy1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)

    at System.Lazy1.CreateValue()

    at System.Lazy1.get_Value()

    at Keras.Keras.get_Instance()

    at Keras.Models.BaseModel.ModelFromJson(String json_string)

这似乎是一个简单的路径问题,但我已经检查过环境在 C# 控制台应用程序以及 SF 应用程序中保持相同的值(在 Visual Studio 中调试时)。

我在这里采取了错误的方法吗?SF 集群节点可以访问主机上的 python 安装吗?


慕标5832272
浏览 119回答 1
1回答

茅侃侃

由于 Service Fabric 本地群集在主机上运行虚拟集群,因此在主机上安装软件并不自动意味着虚拟集群中的节点可以访问它们。为了在 SF 上运行 Python,必须将其安装在集群本身的节点上。 

繁华开满天机

我建议使用 Docker 容器将应用程序及其先决条件打包在一起,以便它可以在几乎任何能够运行容器的主机上运行。这样,如果它可以在您的计算机上运行,它也可以在托管集群上运行。它还可以避免在节点上安装工具的需要,使它们更像“牛”而不是“宠物”。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python