配置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 https://github.com/huggingface/transformers.git
$ cd transformers
$ python3 -m pip install --no-cache-dir .

安装方法二:标准方法

如果不考虑现有的docker image,可利用官方提供的Dockerfile制做transforms镜像。

$ git clone https://github.com/huggingface/transformers.git # 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

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())

下载预训练好的中文BERT模型

$ 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,有些情况下模型可自动下载)

测试中文BERT

import 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 --max_seq_length 128 --per_device_train_batch_size 32 --learning_rate 2e-5 --num_train_epochs 3 --output_dir /tmp/$TASK_NAME/ 

此时程序将下载相似度训练数据,并按指定参数训练模型(外网时常连不通,请多试几次)。另外,也要以加参数--cache_dir /exports/bert/ 来指定数据存放路径。如果GPU配置正常,几分钟即可训练完成。

参考

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容