首页 > 解决方案 > TensorFlow 未加载到 Docker 容器中

问题描述

我正在尝试将带有 ML.NET 的 Web 应用程序部署到 docker 容器(当我在 IIS Express 中运行它时它没有问题)但是当我在由 Visual Studio 创建的 docker 文件中运行它时,我收到以下错误说没有找到张量流:

System.Reflection.TargetInvocationException:调用的目标已引发异常。---> System.Reflection.TargetInvocationException:调用的目标已抛出异常。---> System.Reflection.TargetInvocationException:调用的目标已抛出异常。---> System.DllNotFoundException:无法加载共享库“tensorflow”或其依赖项之一。为了帮助诊断加载问题,请考虑设置 LD_DEBUG 环境变量:libtensorflow:无法打开共享对象文件:Tensorflow.c_api.TF_NewGraph() 中没有此类文件或目录。Microsoft.ML 中的 Tensorflow.Graph..ctor()。 TensorFlow.TensorFlowUtils.LoadTFSession(IExceptionContext ectx, Byte[] modelBytes, String modelFile) 在 Microsoft.ML.Vision.ImageClassificationModelParameters..

这是 docker 文件供参考:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Hotdogapp/Server/Hotdogapp.Server.csproj", "Hotdogapp/Server/"]
COPY ["Hotdogapp/Shared/Hotdogapp.Shared.csproj", "Hotdogapp/Shared/"]
COPY ["Hotdogapp/Client/Hotdogapp.Client.csproj", "Hotdogapp/Client/"]
RUN dotnet restore "Hotdogapp/Server/Hotdogapp.Server.csproj"
COPY . .
WORKDIR "/src/Hotdogapp/Server"
RUN dotnet build "Hotdogapp.Server.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Hotdogapp.Server.csproj" -c Release -o /app/publish


FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Hotdogapp.Server.dll"]

是否有我应该为 ML.NET/TensorFlow 使用的特殊图像?

标签: dockertensorflow.net-coreml.net

解决方案


抛出错误是因为它找不到 libtensorflow.so 正在使用的依赖项之一。要找出缺少哪个依赖项,您可以转到运行时文件夹(/bin/${configuration}/${framework}/runtime/linux-x64/native)并尝试以下 cmd,它应该会告诉您缺少的依赖项.

ldd libtensorflow.so

要解决这个问题,您可以简单地安装缺少的依赖项,或者使用较低版本的 tf 运行时,(例如 redist.tensorflow 1.*)对我有用。您也可以在Tensorflow.Net中提出问题,在那里您可以获得更好的答案。


推荐阅读