配置BERT运行环境
自然语言处理库Transformers包含了BERT、GPT、GPT-2、Transformer-XL、XLNet、XLM等模型的实现,近两年Pytorch生态日趋成熟。因此,本文中使用Transformers的Pytorch支持来调用BERT模型。
检查cuda版本深度学习模型如果没有GPU加持,训练速度几乎是无法忍受的,因此,在使用模型前请先确认GPU正常工作;另外,最新版本的Transformers需要Pytorch 1.5.0及以上版本,而Pytorch 1.5.0底层又依赖CUDA 10.2以上版本。
使用以下命令查看CUDA版本
$ nvidia-smi
(查看右上角CUDA Version: xx.x)
如果低于10.2,可通过以下命令安装
$ sudo apt-get install cuda-10-2
安装好后请重启系统
安装方法一:通用方法由于安装依赖库可能干扰主机Linux系统中的Python环境,建议在docker中使用Transformers运行环境。
如果之前有比较常用的docker image,可通过pip安装transformers。
$ pip install transformers
推荐下载transfromers源码安装,以保持例程与系统中软件版本一致
$ git clone /news/upload/ueditor/image/202209/ji1mc2sxqv0安装方法二:标准方法
$ cd transformers
$ python3 -m pip install --no-cache-dir .
如果不考虑现有的docker image,可利用官方提供的Dockerfile制做transforms镜像。
$ git clone /news/upload/ueditor/image/202209/ji1mc2sxqv0 # README支持中文简体
$ cd transformers/
$ docker build -t transformers-pytorch-gpu:test1 docker/transformers-pytorch-gpu
(注意:在transformers目录下运行,否则Dockerfile中复制文件路径不对)
启动docker
$ nvidia-docker run --rm -v /exports:/exports -it transformers-pytorch-gpu:test1 bash
(注意:使用nvidia-docker启动docker,否则无法在docker内部使用GPU)
测试GPU是否正常工作在docker内运行以下Python程序,测试GPU+CUDA+Pytorch是否正常工作。
import torch下载预训练好的中文BERT模型
print(torch.cuda.is_available())
print(torch.__version__)
ngpu= 1
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print(device)
print(torch.cuda.get_device_name(0))
print(torch.rand(3,3).cuda())
$ git clone https://huggingface.co/bert-base-chinese
$ cd bert-base-chinese/
从浏览器下载pytorch_model.bin覆盖目录中的pytorch_model.bin(用393M的文件覆盖134K的文件),或者复制download地址后用wget下载:
$ wget https://huggingface.co/bert-base-chinese/resolve/main/pytorch_model.bin
(使用模型时指定bert-base-chinese,有些情况下模型可自动下载)
测试中文BERTimport torch语义相似度示例
from transformers import BertModel, BertConfig, BertTokenizer
modle_path = '/exports/git/bert-base-chinese' # 下载模型的目录
tokenizer = BertTokenizer.from_pretrained(modle_path)
model = BertModel.from_pretrained(modle_path)
input_ids = torch.tensor([tokenizer.encode("测试一下", add_special_tokens=True)])
with torch.no_grad():
output = model(input_ids)
last_hidden_state = output[0]
pooler_output = output[1]
print(last_hidden_state[:, 0, :])
源码的transformers/examples/pytorch/目录下有各种例程,其中包含常用的问答,多选,分类等自然语言应用。
下面以语义相似度为例,看看如何使用BERT库解决实际问题。
GLUE(General Language Understanding Evaluation)是用于评估NLP 模型的一组标准,其中包含诸多项目,以语义相似度STS-B(Semantic Textual Similarity)为目录,相关代码在:
transformers/examples/pytorch/text-classification/run_glue.py,可以该程序为入口学习如何使用BERT模型。
安装依赖库
$ cd transformers/examples/pytorch/text-classification/
$ pip install -r requirements.txt
测试例程(具体请参考例程目录下的README)
$ export TASK_NAME=stsb
$ python run_glue.py --model_name_or_path bert-base-cased --task_name $TASK_NAME --do_train --do_eval(附带python代码)
/news/upload/ueditor/image/202209/5dkga01ukgv.html 安装https://pytorchchina.com/2020/02/29/transformers-%E5%AE%89%E8%A3%85/中文新闻情感分类 Bert-Pytorch-transformers
版权声明
本文仅代表作者观点,不代表博信信息网立场。