Tensorflow не загружается в контейнер Docker - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь развернуть веб-приложение с ML. NET в контейнере docker (он работает без проблем, когда я запускаю его в IIS Express), но когда я запускаю его в файле docker, который был создан Visual Studio, я получаю следующую ошибку, говорящую о том, что тензорный поток не был найден:

System.Reflection.TargetInvocationException: цель вызова сгенерировала исключение. ---> System.Reflection.TargetInvocationException: исключение создано целью вызова. ---> System.Reflection.TargetInvocationException: исключение создано целью вызова. ---> System.DllNotFoundException: невозможно загрузить общую библиотеку tenorflow или одну из ее зависимостей. Чтобы помочь в диагностике проблем с загрузкой, рассмотрите возможность установки переменной среды LD_DEBUG: libtensorflow: невозможно открыть файл совместно используемых объектов: нет такого файла или каталога в Tensorflow.c_api.TF_NewGraph () в Tensorflow.Graph..ctor () в Microsoft.ML. TensorFlow. ctx) --- Конец внутренней трассировки стека исключений --- в System.RuntimeMethodHandle.InvokeMethod (цель объекта, аргументы Object [], сигнатура подписи, логический конструктор, логические исключения wrapExceptions) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, BindingFlags invokeAttr, Binder binder, параметры Object [], культура CultureInfo) в System.Reflection.MethodBase.Invoke (Object obj, параметры Object []) в Microsoft.ML.Runtime.ComponentCatalog. Загрузить Введите signatureType, TRes & result, String name, String options, Object [] extra) в Microsoft.ML.Runtime.ComponentCatalog.TryCreateInstance [TRes, TSig] (IHostEnvironment env, TRes & result, String name, String options, Object [] extra) в Microsoft.ML.ModelLoadContext.TryLoadModelCore [TRes, TSig] (IHostEnvironment env, TRes & result, Object [] extra) в Microsoft.ML.ModelLoadContext.TryLoadModel [TRes, TSig] (IHostEnvironment env, TResReader и результат, EntryRepository Ent. , String dir, Object [] extra) в Microsoft.ML.ModelLoadContext.LoadModel [TRes, TSig] (IHostEnvironment env, TRes & result, RepositoryReader rep, Entry ent, String dir, Object [] extra) в Microsoft.ML.ModelLoadContext. LoadModelOrNull [TRes, TSig] (IHostEnvironment env, TR es & result, RepositoryReader rep, String dir, Object [] extra) в Microsoft.ML.ModelLoadContext.LoadModelOrNull [TRes, TSig] (IHostEnvironment env, TRes & result, String name, Object [] extra) в Microsoft.ML.ModelLoadContext.LoadModel [TRes, TSig] (IHostEnvironment env, TRes & result, String name, Object [] extra) в 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?

1 Ответ

0 голосов
/ 03 августа 2020

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
...