我创建了一个 Dockerfile,如下所示:
FROM tensorflow/tensorflow:latest
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["fastapi", "run", "app/main.py", "--port", "80"]
和具有以下值的requirements.txt文件:
fastapi>=0.110.0,<0.113.0
pydantic>=2.7.0,<3.0.0
tensorflow
我使用以下命令来构建 docker 并运行它
docker build --platform=linux/arm64/v8 -t myimage .
docker run -d --name mycontainer -p 80:80 myimage
主函数有以下代码:
from typing import Union
from fastapi import FastAPI, Request
# from tensorflow import keras
# import tensorflow
# model = keras.models.load_model("app/my_model.keras")
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
每当我尝试在上面的主文件中导入tensorflow时,Docker运行时都会出现错误。任何相同的解决方案
我尝试将From路径更改为python 3.9,但在安装tensorflow时导致编译错误。
如果可以的话,尝试使用更匹配的图像。
FROM tensorflow/tensorflow:2.9.0
检查 ARM 和依赖项的最佳匹配。
如果您在 Mac M1 或更高版本上运行 docker,您将无法使用预构建的 docker 映像。至少从今天开始。
我有 Mac Por M1。我检查了预构建的 docker 镜像的几个版本:
Tensorflow 2.9版本:
docker run -it --rm tensorflow/tensorflow:2.9.0
# next line inside the container
python -c "import tensorflow"
这会报错:
The TensorFlow library was compiled to use AVX instructions, but these aren't available on your machine.
Aborted
Tensorflow 2.16(最新)版本:
docker run -it --rm tensorflow/tensorflow:latest bash
# next line inside the container
python -c "import tensorflow"
这只是输出
Illegal instruction
因此我猜唯一的选择是编译支持 mac ARM64 的自定义 dockertensofrlow 镜像。