浏览代码

Dockerize the app and change models file to install model in runtime if not installed

Mohidul Islam 4 年之前
父节点
当前提交
70ba031e76
共有 5 个文件被更改,包括 58 次插入6 次删除
  1. 14 0
      Dockerfile
  2. 10 0
      docker-compose.yml
  3. 2 0
      entrypoint.sh
  4. 26 0
      requirements.txt
  5. 6 6
      src/models.py

+ 14 - 0
Dockerfile

@@ -0,0 +1,14 @@
+FROM python:3.8.4-slim-buster
+
+ENV PYTHONUNBUFFERED 1
+
+WORKDIR /app
+# We copy just the requirements.txt first to leverage Docker cache
+COPY ./requirements.txt /app/requirements.txt
+RUN pip install -r requirements.txt
+
+COPY . /app
+
+RUN chmod +x entrypoint.sh
+ENTRYPOINT ["sh", "entrypoint.sh"]
+

+ 10 - 0
docker-compose.yml

@@ -0,0 +1,10 @@
+version: '3'
+services:
+  api:
+    build: .
+    volumes:
+      - .:/app
+    restart: always
+    ports:
+      - 2020:5000
+

+ 2 - 0
entrypoint.sh

@@ -0,0 +1,2 @@
+#!/bin/bash
+exec uvicorn --host="0.0.0.0" --port=5000 --workers=4 --log-level=debug --reload src.main:app

+ 26 - 0
requirements.txt

@@ -0,0 +1,26 @@
+blis==0.4.1
+catalogue==1.0.0
+certifi==2020.11.8
+chardet==3.0.4
+click==7.1.2
+cymem==2.0.4
+fastapi==0.61.2
+h11==0.11.0
+idna==2.10
+importlib-metadata==2.0.0
+murmurhash==1.0.4
+numpy==1.19.4
+plac==1.1.3
+preshed==3.0.4
+pydantic==1.7.2
+requests==2.25.0
+spacy==2.3.2
+srsly==1.0.4
+starlette==0.13.6
+thinc==7.4.1
+tqdm==4.52.0
+typing-extensions==3.7.4.3
+urllib3==1.26.2
+uvicorn==0.12.2
+wasabi==0.8.0
+zipp==3.4.0

+ 6 - 6
src/models.py

@@ -3,9 +3,9 @@ import spacy
 MODEL_NAME = 'en_core_web_sm'
 
 def get_model():
-    try:
-        spacy_ner_model = spacy.load(MODEL_NAME)
-        print(f"\033[92mSpacy model named {spacy_ner_model.meta.get('name')} has loaded!\033[0m")
-    except OSError:
-        print('\033[93mNo spacy model has found. Please install a small sized spacy model.\033[0m')
-    return spacy_ner_model
+    if not spacy.util.is_package(MODEL_NAME):
+        spacy.cli.download(MODEL_NAME)
+        print(f"\033[92mSpacy model has downloaded!")
+    ner_model = spacy.load(MODEL_NAME)
+    print(f"Spacy model named {ner_model.meta.get('name')} has loaded!\033[0m")
+    return ner_model