【问题标题】:Tensorflow not loading in Docker ContainerTensorFlow 未加载到 Docker 容器中
【发布时间】:2020-08-03 18:20:41
【问题描述】:

我正在尝试将带有 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() 在 Tensorflow.Graph..ctor() 在 Microsoft.ML.TensorFlow.TensorFlowUtils.LoadTFSession(IExceptionContext ectx, Byte[] modelBytes, String modelFile) 在 Microsoft.ML.Vision.ImageClassificationModelParameters..ctor(IHostEnvironment env,ModelLoadContext ctx) 在 Microsoft.ML.Vision.ImageClassificationModelParameters.Create(IHostEnvironment env,ModelLoadContext ctx) --- 内部异常堆栈跟踪结束 --- 在 System.RuntimeMethodHandle.InvokeMethod(对象目标,对象 [] 参数,签名 sig,布尔构造函数,布尔 wrapExceptions) 在 System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object[] 参数,CultureInfo 文化) 在 System.Reflection.MethodBase.Invoke(对象 obj,对象 [] 参数) 在 Microsoft.ML.Runtime.ComponentCatalog.LoadableClassInfo.CreateInstanceCore(Object[] ctorArgs) 在 Microsoft.ML.Runtime.ComponentCatalog.LoadableClassInfo.CreateInstance(IHostEnvironment 环境,对象参数,对象 [] 额外) 在 Microsoft.ML.Runtime.ComponentCatalog.TryCreateInstance[TRes](IHostEnvironment env,类型 signatureType,TRes& 结果,字符串名称,字符串选项,对象 [] 额外) 在 Microsoft.ML.Runtime.ComponentCatalog.TryCreateInstance[TRes,TSig](IHostEnvironment env,TRes& 结果,字符串名称,字符串选项,对象 [] 额外) 在 Microsoft.ML.ModelLoadContext.TryLoadModelCore[TRes,TSig](IHostEnvironment env,TRes& 结果,Object[] 额外) 在 Microsoft.ML.ModelLoadContext.TryLoadModel[TRes,TSig](IHostEnvironment env,TRes& 结果,RepositoryReader rep,Entry ent,String dir,Object[] extra) 在 Microsoft.ML.ModelLoadContext.LoadModel[TRes,TSig](IHostEnvironment env, TRes& 结果, RepositoryReader rep, Entry ent, String dir, Object[] extra) 在 Microsoft.ML.ModelLoadContext.LoadModelOrNull[TRes,TSig](IHostEnvironment env, TRes& 结果, RepositoryReader rep, String dir, Object[] extra) 在 Microsoft.ML.ModelLoadContext.LoadModelOrNull[TRes,TSig](IHostEnvironment env,TRes& 结果,字符串名称,对象 [] 额外) 在 Microsoft.ML.ModelLoadContext.LoadModel[TRes,TSig](IHostEnvironment env,TRes& 结果,字符串名称,对象 [] 额外) 在 Microsoft.ML.Data.MulticlassPredictionTransformer.Create(IHostEnvironment env, ModelLoadContext ctx)

这里是 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 使用的特殊图像?

【问题讨论】:

  • 你引用了哪个版本的SciSharp.TensorFlow.Redist
  • 版本 2.2.01 和 Microsoft.ML 1.5.0
  • 刚刚更新到 Microsoft.ML 的 2.3.0 和 1.5.1,但仍然出现相同的错误

标签: docker tensorflow .net-core ml.net


【解决方案1】:

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

ldd libtensorflow.so

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

【讨论】:

    【解决方案2】:

    TensorFlow 是一个 python 包,因此您需要将它作为依赖项安装到您的 Docker 映像中。尝试将其添加到 Dockerfile 的最后阶段:

    RUN apt-get update \
        && apt-get install -y \
            python3-pip \
        && rm -rf /var/lib/apt/lists/*
    RUN ln -sf /usr/bin/python3 /usr/bin/python \
        && python -m pip install tensorflow
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2022-10-08
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多