NLP GLUE baseline环境搭建

1.0 背景

记录一下自己运行GLUE baseline的一些坑。

2.0 正文

2.1 环境(Linux)

安装ubuntu:

版本:ubuntu-18.04.1-desktop-amd64.iso		

安装conda:

	https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/
	Miniconda3-latest-Linux-x86_64.sh
	输入命令:source ~/.bashrc

设置虚拟机共享目录(可选):
NLP GLUE baseline环境搭建_第1张图片

开始安装glue:

	按照官方给出的环境文件安装:
	conda env create -f environment.yml
	(我安装好环境后也导出了一个yml,但是直接安装还是会有一些报错,但可以跳过“问题1”)

问题1:

  • 网络不行,里面包的下载不下来。
  • 那就只能自己按照文本内容一个个装了。

问题2:

  • Error:没有sklearn.utils.linear_assignment_

  • 百度了一下,说是scikit-learn版本问题。卸载原来的scikit-learn,安装低版本的:

      pip3 install -i https://pypi.douban.com/simple scikit-learn==0.19.2
    

问题3:

  • Error:from allennlp.modules.matrix_attention import DotProductMatrixAttention

  • 安装github上面glue-baseline给的环境文件中,allennlp是0.4版本的,但是看了下0.4的代码文件里面没有这个matrix_attention的文件夹,但是github上的allennlp是有的,然后看了下版本更新,发现是从0.5版本开始支持0.4的pytorch(环境文件里给安装的是0.4的pytorch)。于是:

      pip uninstall allennlp
      pip install  allennlp==0.5
    

问题4:

  • Error:pg_config executable not found.

  • 百度上的很多方法都试了,只有下面这个有效:

      sudo apt-get install libpq-dev python-dev
    

问题5:

  • 缺少cove,或者无法加载MTLSTM

  • 需要安装cove,官方安装方法如下:

      git clone https://github.com/salesforce/cove.git # use ssh: [email protected]:salesforce/cove.git
      cd cove
      pip install -r requirements.txt
      python setup.py develop
    

    但是pip install -r requirements.txt的时候不行,然后手动装torchtext,注意版本:pytorch0.4是对应torchtext0.2.3。

      pip install torchtext==0.2.3
    

问题6:

  • 运行的时候发现log中显示:Finished building vocab. Using 2 words
    (看着就不正常,但是不报错,会一直运行到beginning trainning然后就卡住了)
    或者一直闪一段重复的log

  • 最后发现似乎是缺少nltk的punkt,然后按照以下方法装好,就没问题了:

      git clone https://github.com/WILDCHAP/nltk_data
      注意:要把下好的nltk_data放到能索引到的目录里(比如:/home/用户名/)
    

    具体可以参考博客:https://blog.csdn.net/WILDCHAP_/article/details/108670801

问题7:

  • 缺少gcc

      sudo apt update
      sudo apt install build-essential
    

问题8:

  • 其他

      pip install overrides==4.1.2
    

问题9:

  • 找不到训练数据集

      glue代码里面/src/preprocess.py 中22行的这个地址要换成自己放glue数据的地址,
      比如cola数据放在glue/CoLA ,这里就写/mnt/hgfs/share_file/glue/
    

NLP GLUE baseline环境搭建_第2张图片

2.2 测试

	python /mnt/hgfs/share_file/GLUE-baselines-master/src/main.py --exp_dir /mnt/hgfs/share_file/all_out --run_dir /mnt/hgfs/share_file/all_out/run_dir --train_tasks cola --eval_tasks none --word_embs_file /mnt/hgfs/share_file/glove.840B.300d.txt --n_epochs 1 --cuda -1 --classifier_hid_dim 64 --d_hid 64 --val_interval 50 --patience 2

–exp_dir、–run_dir是输出的路径,–train_tasks 可以选all、none、或者几个任务名用,分隔。
(注意:all表示的是 [‘mnli’, ‘mrpc’, ‘qqp’, ‘rte’, ‘qnliv2’, ‘snli’, ‘sst’, ‘sts-b’, ‘wnli’, ‘cola’] 这些任务,比glue给的数据集下载地址 https://gluebenchmark.com/tasks 上可以下载的少了一个snli,但是提交的要求里也不含这个所以去掉就好了。如果没有要训练的任务,必须填none,不设置这个参数的话运行过程中会产生任务名为空串 “” 的任务,key找不到而出错。)
–cuda -1 没有gpu要设置为-1
–eval_tasks 这个和–train_tasks的区别是,train是基线模型(bilstm的那个)上面用glue数据集进行训练;eval指的是在模型后面加一层分类器,然后用glue数据集训练分类器,需要自己在源码里面添加连接代码,好像有给个空的函数可以填。

2.4 在服务器上安装时出现的新错误

  • sudo apt-get -f install 后出现错误:
dpkg-deb: error: archive '/var/cache/apt/archives/nsight-compute-2019.4.0_2019.4.0.12-1_amd64.deb' has premature member 'control.tar.xz' before 'control.tar.gz', giving up
dpkg: error processing archive /var/cache/apt/archives/nsight-compute-2019.4.0_2019.4.0.12-1_amd64.deb (--unpack):
 subprocess dpkg-deb --control returned error exit status 2
Errors were encountered while processing:
 /var/cache/apt/archives/nsight-compute-2019.4.0_2019.4.0.12-1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

解决:
https://blog.csdn.net/Three_dog/article/details/104653506/
根据博客的说法,应该更新dpkg:
aptitude upgrade dpkg

  • aptitude upgrade dpkg时又报错:
dpkg: error processing package cuda-10-1 (--configure):
 dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of cuda:
 cuda depends on cuda-10-1 (>= 10.1.243); however:
  Package cuda-10-1 is not configured yet.

解决:
尝试 sudo dpkg --configure -a (这句的意思大概是检查依赖) 后:

dpkg: dependency problems prevent configuration of cuda-nsight-compute-10-1:
 cuda-nsight-compute-10-1 depends on nsight-compute; however:
  Package nsight-compute is not installed.

发现缺少nsight-compute
解决:
sudo apt-get install nsight-compute

其他

1.关于共享文件夹

重启虚拟机后,共享文件夹失效。
解决方法如下:
1、查看共享文件夹是否存在 vmware-hgfsclient
2、执行 sudo vmhgfs-fuse .host:/ /mnt/hgfs/ -o allow_other -o nonempty

2.任务被kill

任务运行过程中被kill了,内存太小,关闭虚拟机,调大内存。

3.我导出的glue环境的yml文件

复制保存到txt改名字为.yml即可。

name: glues
channels:
  - defaults
dependencies:
  - _libgcc_mutex=0.1=main
  - blas=1.0=openblas
  - ca-certificates=2020.10.14=0
  - certifi=2020.6.20=py36h06a4308_2
  - click=7.1.2=py_0
  - cudatoolkit=9.0=h13b8566_0
  - cudnn=7.6.5=cuda9.0_0
  - intel-openmp=2019.4=243
  - joblib=0.17.0=py_0
  - ld_impl_linux-64=2.33.1=h53a641e_7
  - libedit=3.1.20191231=h14c3975_1
  - libffi=3.3=he6710b0_2
  - libgcc-ng=9.1.0=hdf63c60_0
  - libgfortran-ng=7.3.0=hdf63c60_0
  - libopenblas=0.3.10=h5a2b251_0
  - libstdcxx-ng=9.1.0=hdf63c60_0
  - mkl=2018.0.3=1
  - nccl=1.3.5=cuda9.0_0
  - ncurses=6.2=he6710b0_1
  - ninja=1.10.1=py36hfd86e86_0
  - nltk=3.5=py_0
  - numpy=1.19.2=py36h6163131_0
  - numpy-base=1.19.2=py36h75fe3a5_0
  - openssl=1.1.1h=h7b6447c_0
  - pip=20.2.4=py36_0
  - pycparser=2.20=py_2
  - python=3.6.12=hcff3b4d_2
  - pytorch=0.4.0=py36hdf912b8_0
  - readline=8.0=h7b6447c_0
  - scipy=1.5.2=py36habc2bb6_0
  - setuptools=50.3.0=py36hb0f4dca_1
  - sqlite=3.33.0=h62c20be_0
  - threadpoolctl=2.1.0=pyh5ca1d4c_0
  - tk=8.6.10=hbc83047_0
  - tqdm=4.50.2=py_0
  - wheel=0.35.1=py_0
  - xz=5.2.5=h7b6447c_0
  - zlib=1.2.11=h7b6447c_3
  - pip:
    - allennlp==0.5.0
    - argparse==1.4.0
    - attrs==20.2.0
    - awscli==1.18.168
    - backcall==0.2.0
    - botocore==1.19.8
    - cffi==1.11.2
    - chardet==3.0.4
    - colorama==0.4.3
    - cymem==2.0.3
    - cytoolz==0.9.0.1
    - decorator==4.4.2
    - dill==0.2.9
    - docutils==0.15.2
    - editdistance==0.5.3
    - flaky==3.7.0
    - flask==0.12.1
    - flask-cors==3.0.3
    - gevent==1.2.2
    - greenlet==0.4.17
    - h5py==2.10.0
    - idna==2.10
    - importlib-metadata==2.0.0
    - iniconfig==1.1.1
    - ipdb==0.13.4
    - ipython==7.16.1
    - ipython-genutils==0.2.0
    - itsdangerous==1.1.0
    - jedi==0.17.2
    - jinja2==2.11.2
    - jmespath==0.10.0
    - markupsafe==1.1.1
    - msgpack==0.5.6
    - msgpack-numpy==0.4.3.2
    - murmurhash==1.0.2
    - overrides==3.1.0
    - packaging==20.4
    - parso==0.7.1
    - pexpect==4.8.0
    - pickleshare==0.7.5
    - plac==0.9.6
    - pluggy==0.13.1
    - preshed==2.0.1
    - prompt-toolkit==3.0.8
    - protobuf==3.13.0
    - psycopg2==2.8.6
    - ptyprocess==0.6.0
    - py==1.9.0
    - pyasn1==0.4.8
    - pygments==2.7.2
    - pyhocon==0.3.35
    - pyparsing==2.4.7
    - pytest==6.1.2
    - python-dateutil==2.8.1
    - pytz==2017.3
    - pyyaml==5.3.1
    - regex==2018.1.10
    - requests==2.24.0
    - responses==0.12.0
    - rsa==4.5
    - s3transfer==0.3.3
    - scikit-learn==0.19.2
    - six==1.15.0
    - spacy==2.0.18
    - tensorboardx==1.2
    - thinc==6.12.1
    - toml==0.10.1
    - toolz==0.11.1
    - torchtext==0.2.3
    - traitlets==4.3.3
    - typing==3.7.4.3
    - ujson==4.0.1
    - unidecode==1.1.1
    - urllib3==1.25.11
    - wcwidth==0.2.5
    - werkzeug==1.0.1
    - wrapt==1.10.11
    - zipp==3.4.0
prefix: /home/linhai/anaconda3/envs/glues

你可能感兴趣的:(nlp,python,自然语言处理)