docker - 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 使用的特殊图像?
解决方案
抛出错误是因为它找不到 libtensorflow.so 正在使用的依赖项之一。要找出缺少哪个依赖项,您可以转到运行时文件夹(/bin/${configuration}/${framework}/runtime/linux-x64/native)并尝试以下 cmd,它应该会告诉您缺少的依赖项.
ldd libtensorflow.so
要解决这个问题,您可以简单地安装缺少的依赖项,或者使用较低版本的 tf 运行时,(例如 redist.tensorflow 1.*)对我有用。您也可以在Tensorflow.Net中提出问题,在那里您可以获得更好的答案。
推荐阅读
- python - Flask 如何在不呈现新页面的情况下仅返回 jinja 的变量?
- c++ - 在 C++ 模板中获取指针的目标类型
- python - 刷新的 Pygame 窗口将 Sprite 以前的位置显示为背景屏幕的一部分
- javascript - 在页面加载时多次调用 React Fetch API
- c++ - 如何从函数返回具有多个值的数组?C++
- kubernetes - GKE 中同时运行的 Pod 数量的限制因素是什么?
- sql - 是否可以测试列的存在,然后根据列是否存在来选择操作?
- python - 将字典合并到数据框,其中两个字典值都是标量
- html - React.js(参考错误:React 未定义)
- c++ - error: request for memver '' in '', which is of non-class type 'int*'//使用void函数内部的方法打印结构中的信息