使用 gpu 的 stanfordnlp 对 python 代码进行容器化

Containerization of a python code with stanfordnlp that uses gpu

我想 docker 容器化我的 python 使用 gpu 的脚本。容器化的原因是我试图在安装了 python3.5 但 stanfordnlp 需要 python3.6+ 的服务器中 运行 这段代码。

所以我的方法是创建一个使用最新 python 图像的容器,运行 python 将使用 nvidia gpu 的脚本。

下面是 python 代码的一个片段,它导入了用于词形还原技术的 stanfordnlp

import stanfordnlp
import pandas as pd
import string

stanfordnlp.download('en')
nlp = stanfordnlp.Pipeline(processors='tokenize,mwt,lemma,pos', use_gpu=True)

如您所见,我已明确输入 use_gpu=True,尽管根据此 link

默认情况下为 True

接下来我写了一个Dockerfile

FROM python:3
WORKDIR /usr/src/app
COPY lemmatizer.py ./
COPY eng_wikipedia_2016_1M-sentences.txt ./
RUN pip install stanfordnlp pandas
CMD [ "python" , "./lemmatizer.py" ]

当我构建然后 运行 Dockerfile 时,根据本 link 中的指南使用以下命令在创建和部署容器时使用 gpu 服务。

nvidia-docker build -t pylemm-gpu .
docker run -it --gpus all pylemm-gpu

执行上述所有步骤后,我仍然收到消息说我的容器正在使用 cpu 而不是 gpu。我真的很感激指南 and/or 链接正确设置我的容器,以便它可以使用 gpu。

p.s。我已经尝试了 link 中的使用部分并检查了我的服务器是否有 3 个 gpus。

Cuda 驱动程序已安装,如命令所示

nvidia-smi

stanfordnlp 使用 pytorch,因此我以交互方式拉取了 pytorch docker 图像和 运行。我导入了 torch 并检查了是否使用

安装了 cuda
torch.cuda.is_available()

返回 False。

使用下面的命令

torch.version.cuda

我检查了该图像中使用的 Cuda 版本

然后我了解到pytorch/pytorch使用的是最新版本的Cuda:根据link. In my server it was using Cuda version 10.0, therefore I searched for an older version of pytorch using Cuda version 10.0 (matches with my Cuda version) from this link最新版本。

这解决了我的问题,stanfordnlp 和 stanza 现在都在使用 GPU。