wangyuxinwhy / uniem

unified embedding model

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于微调环境

Galaxy-Ding opened this issue · comments

🐛 bug 说明

背景:
之前作者您说,是可以在colab 试下,如今我试了:出了很多问题,如下所示:
image

问题:
还是之前的问题,我现在是想在colab 的试验下,然后把微调的环境的requireme.txt 导出来,但是目前看起来这条路是不行的,因此想要问下作者,可否导出requirement。txt?

Python Version

3.10

这个确实奇怪,看起来是 uniem 的上游依赖出了问题,我在 colab 上面报的错是需要 accelerate>0.20.3 。我修复一下这个问题。

colab 导出 requirements.txt 可能确实走不通,uniem 的依赖项写在项目中的 pyproject.toml 中,如下:

python = "^3.10"
transformers = "^4.28.0"
accelerate = "^0.19.0"
tqdm = "^4.65.0"
typer = {extras = ["all"], version = "^0.9.0"}
datasets = "^2.12.0"

uniem 升级了 accelerate 的依赖,现在在 colab 上没有问题了,看来是 transformers 的升级没有正确声明对 accelerate 的依赖,或者 pip 没有正确的解决冲突...。

uniem 升级了 accelerate 的依赖,现在在 colab 上没有问题了,看来是 transformers 的升级没有正确声明对 accelerate 的依赖,或者 pip 没有正确的解决冲突...。

good,后来我通过降级transoformer 就可以了。另外我贴出的我的requirements
我自己也训练了一批数据,效果也还好,比起为微调之前的数据有较大的改善。

accelerate==0.20.0
aiohttp==3.8.4
aiosignal==1.3.1
async-timeout==4.0.2
attrs==23.1.0
brotlipy==0.7.0
cachetools==5.3.0
certifi @ file:///croot/certifi_1683875369620/work/certifi
cffi @ file:///tmp/abs_98z5h56wf8/croots/recipe/cffi_1659598650955/work
charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work
click==8.0.3
colorama==0.4.6
coverage==7.2.3
cryptography @ file:///croot/cryptography_1677533068310/work
dataclasses-json==0.5.7
datasets==2.13.1
deepspeed==0.8.0
dill==0.3.6
et-xmlfile==1.1.0
filelock @ file:///croot/filelock_1672387128942/work
frozenlist==1.3.3
fsspec==2023.6.0
gmpy2 @ file:///tmp/build/80754af9/gmpy2_1645455533097/work
gptcache==0.1.14
hjson==3.1.0
huggingface-hub==0.16.4
idna @ file:///croot/idna_1666125576474/work
Jinja2 @ file:///croot/jinja2_1666908132255/work
langchain==0.0.142
markdown-it-py==3.0.0
MarkupSafe @ file:///opt/conda/conda-bld/markupsafe_1654597864307/work
marshmallow==3.19.0
marshmallow-enum==1.5.1
mdurl==0.1.2
mkl-fft==1.3.1
mkl-random @ file:///home/builder/ci_310/mkl_random_1641843545607/work
mkl-service==2.4.0
mpmath==1.2.1
multidict==6.0.4
multiprocess==0.70.14
networkx @ file:///croot/networkx_1678964333703/work
ninja==1.11.1
numpy @ file:///croot/numpy_and_numpy_base_1682520569166/work
nvidia-cublas-cu11==11.10.3.66
nvidia-cuda-nvrtc-cu11==11.7.99
nvidia-cuda-runtime-cu11==11.7.99
nvidia-cudnn-cu11==8.5.0.96
openai==0.27.4
openapi-schema-pydantic==1.2.4
openpyxl==3.1.2
packaging==23.1
pandas==2.0.3
Pillow==9.4.0
psutil==5.9.5
py-cpuinfo==9.0.0
pyarrow==11.0.0
pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work
pydantic==1.10.7
Pygments==2.15.1
pyOpenSSL @ file:///croot/pyopenssl_1677607685877/work
PySocks @ file:///home/builder/ci_310/pysocks_1640793678128/work
pytest-cov==3.0.0
python-dateutil==2.8.2
pytz==2023.3
PyYAML==6.0.1
regex==2023.6.3
requests @ file:///croot/requests_1682607517574/work
responses==0.18.0
rich==13.4.2
safetensors==0.3.1
shellingham==1.5.0.post1
six @ file:///tmp/build/80754af9/six_1644875935023/work
sympy @ file:///croot/sympy_1668202399572/work
tenacity==8.2.2
tokenizers==0.13.3
torch==2.0.0
torchaudio==2.0.0
torchvision==0.15.0
tqdm==4.65.0
transformers==4.30.0
triton==2.0.0
typer==0.9.0
typing-inspect==0.8.0
typing_extensions @ file:///croot/typing_extensions_1686601443660/work
tzdata==2023.3
uniem==0.3.1
urllib3 @ file:///croot/urllib3_1686163155763/work
xxhash==3.2.0
yarl==1.8.2

另外,我看作者您这边的微调教程,似乎没有怎么告诉我们jsonl 数据集的加载方式?
我目前来说是参考您这边的 examples/finetune_jsonl.py 来改动我的训练数据的,
嗯,感觉 加载数据起来,如果想要知道如何打乱数据,随机数种子?又或者分割出train val 的数据集,又或者,train val test 的分割,也可能我对库datasets 的了解不够深入?

在微调教程中的这段代码

from datasets import load_dataset

from uniem.finetuner import FineTuner

dataset = load_dataset('vegaviazhang/Med_QQpairs')['train']
dataset = dataset.rename_columns({'question1': 'sentence1', 'question2': 'sentence2'})

#  Med_QQpairs只有训练集,我们需要手动划分训练集和验证集
dataset = dataset.train_test_split(test_size=0.1, seed=42)
dataset['validation'] = dataset.pop('test')

finetuner = FineTuner.from_pretrained('moka-ai/m3e-small', dataset=dataset)
fintuned_model = finetuner.run(epochs=3)

恩,这个是在hub上的数据集,然后,如果我有本地的数据集是如何加载的?这个一直困扰我,后来,我就变成csv 的方式来加载,然后参考examples/finetune_jsonl.py 来训练,还是比较痛苦的。

如果你想使用 datasets 库来加载本地数据集,可以参考此教程 https://huggingface.co/docs/datasets/loading#local-and-remote-files

如果你想使用 pandas ,也可以使用对应的文件读取 api

FineTuner 其实你只要给他一个 Iterable[dict] 就行了,可以兼容各种类型的数据集

至于 打乱数据(shuffle)随机种子 (seed)分割数据集等,可以找找相关的教程学习一下,方法是很多的,我个人推荐通过 datasets 或者 sklearn 来实现。