Spaces:
Runtime error
Runtime error
**1、数据编码问题** | |
https://github.com/Facico/Chinese-Vicuna/issues/5 | |
我们在处理数据的时候,因为没有强制让json使用非ascii编码,所以非英文部分会自动在json中自动使用ascii转义。 | |
- 由于json的load会自动将这些ascii转义成对应的符号(比如中文),所以并不影响我们的程序运行 | |
下面是一个用bert-base-chinese的一个演示代码,你也可以将其替换成其他的tokenizer | |
- 使用的数据是sample.json | |
```python | |
import json | |
from transformers import AutoTokenizer | |
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese") | |
path = "./sample.json" | |
data = json.load(open(path, "r")) | |
str_chinese = data[0]['instruction'] | |
print(str_chinese) | |
print(tokenizer(str_chinese)) #这是tokenizer正常的编码 | |
json.dump(data, open("./sample_test.json", "w")) #这个文件,直接查看的话中文部分都是ascii | |
data_test = json.load(open("./sample_test.json", "r")) #载入之后是正常的 | |
str_ascii = data_test[0]['instruction'] | |
print(str_ascii) | |
print(tokenizer(str_ascii)) #由于载入是正常的,不影响tokenizer正常的编码 | |
str_ascii_true = str_chinese.encode('unicode-escape') #我们这里强制转换编码来展示json的转移机制 | |
print('\n') | |
print(str_ascii_true) | |
test_json_data = "{" + f"\"instruction\": \"{str_ascii_true}\"" + "}" | |
test_json_data = test_json_data.replace("\\u", "u") | |
print(test_json_data) #这个是json将要载入的字典,可以发现里面是上面中文对应的ascii,其中有一个“b”字符请忽略,这是bytes对象的字符串 | |
ascii_test_data = json.loads(test_json_data) | |
print(ascii_test_data) #用json载入之后发现自动转义成正常的中文 | |
json.dump(data, open("./sample_test_utf8.json", "w"), ensure_ascii=False, indent=2) | |
#如果想json能查看的舒服一点,可以增加后面这两个参数,让其自动缩进同时不编码ascii | |
``` | |
正常输出如下: | |
```bash | |
用一句话描述地球为什么是独一无二的。\n | |
{'input_ids': [101, 4500, 671, 1368, 6413, 2989, 6835, 1765, 4413, 711, 784, 720, 3221, 4324, 671, 3187, 753, 4638, 511, 139, 156, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} | |
用一句话描述地球为什么是独一无二的。\n | |
{'input_ids': [101, 4500, 671, 1368, 6413, 2989, 6835, 1765, 4413, 711, 784, 720, 3221, 4324, 671, 3187, 753, 4638, 511, 139, 156, 102], 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]} | |
b'\\u7528\\u4e00\\u53e5\\u8bdd\\u63cf\\u8ff0\\u5730\\u7403\\u4e3a\\u4ec0\\u4e48\\u662f\\u72ec\\u4e00\\u65e0\\u4e8c\\u7684\\u3002\\\\n\\n' | |
{"instruction": "b'\u7528\u4e00\u53e5\u8bdd\u63cf\u8ff0\u5730\u7403\u4e3a\u4ec0\u4e48\u662f\u72ec\u4e00\u65e0\u4e8c\u7684\u3002\\\\n\\n'"} | |
{'instruction': "b'用一句话描述地球为什么是独一无二的。\\\\n\\n'"} | |
``` | |
如果希望能清晰地查看里面的内容,可以使用上面代码的最后一行。先将数据load后 | |
- 使用ensure_ascii=False让其不自动转换成ascii | |
- 使用indent调整json的缩进 | |
**2、环境问题** | |
由于不同机器不同版本会有各种不同的问题。 | |
- ddp跑单卡的问题 | |
- https://github.com/Facico/Chinese-Vicuna/issues/4 | |
- 由于finetune.sh使用的是torchrun来运行的,可能存在torch和python版本之间的不对应问题。因为单卡不需要ddp,此时可以直接使用python来运行。参照readme中的单卡指令。 | |
- python 3.11中torchrun有bug,详见[link](https://github.com/facebookresearch/llama/issues/86) | |
- ddp跑多卡 | |
- https://github.com/Facico/Chinese-Vicuna/issues/3 | |
- 首先注意是不是自己机器的问题,然后再注意版本的问题,一下是一个python3.10能用的配置参考 | |
- ``` | |
torch 1.13.1 | |
torchtyping 0.1.4 | |
torchvision 0.14.1 | |
absl-py 1.4.0 | |
accelerate 0.15.0 | |
aiodns 3.0.0 | |
aiofiles 23.1.0 | |
aiohttp 3.8.3 | |
aiosignal 1.3.1 | |
altair 4.2.2 | |
anyio 3.6.2 | |
appdirs 1.4.4 | |
async-timeout 4.0.2 | |
attrs 22.2.0 | |
beautifulsoup4 4.11.2 | |
bitsandbytes 0.37.0 | |
Brotli 1.0.9 | |
cachetools 5.3.0 | |
certifi 2022.12.7 | |
cffi 1.15.1 | |
charset-normalizer 2.1.1 | |
click 8.1.3 | |
contourpy 1.0.7 | |
cpm-kernels 1.0.11 | |
cycler 0.11.0 | |
datasets 2.8.0 | |
deepspeed 0.7.7 | |
dill 0.3.6 | |
distlib 0.3.6 | |
docker-pycreds 0.4.0 | |
einops 0.6.0 | |
entrypoints 0.4 | |
evaluate 0.4.0 | |
fastapi 0.95.0 | |
ffmpy 0.3.0 | |
filelock 3.9.0 | |
fire 0.5.0 | |
flash-attn 0.2.8 | |
fonttools 4.39.2 | |
frozenlist 1.3.3 | |
fsspec 2023.3.0 | |
gdown 4.6.4 | |
gensim 3.8.2 | |
gitdb 4.0.10 | |
GitPython 3.1.31 | |
google-auth 2.16.2 | |
google-auth-oauthlib 0.4.6 | |
gradio 3.23.0 | |
grpcio 1.51.3 | |
h11 0.14.0 | |
hjson 3.1.0 | |
httpcore 0.16.3 | |
httpx 0.23.3 | |
huggingface-hub 0.13.3 | |
icetk 0.0.5 | |
idna 3.4 | |
inflate64 0.3.1 | |
Jinja2 3.1.2 | |
joblib 1.2.0 | |
jsonlines 3.1.0 | |
jsonschema 4.17.3 | |
kiwisolver 1.4.4 | |
linkify-it-py 2.0.0 | |
loguru 0.6.0 | |
loralib 0.1.1 | |
Markdown 3.4.1 | |
markdown-it-py 2.2.0 | |
MarkupSafe 2.1.2 | |
matplotlib 3.7.1 | |
mdit-py-plugins 0.3.3 | |
mdurl 0.1.2 | |
msgpack 1.0.4 | |
multidict 6.0.4 | |
multiprocess 0.70.14 | |
multivolumefile 0.2.3 | |
networkx 3.0 | |
ninja 1.11.1 | |
nltk 3.8.1 | |
numpy 1.24.2 | |
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 | |
nvidia-ml-py 11.525.84 | |
nvitop 1.0.0 | |
oauthlib 3.2.2 | |
openai 0.27.2 | |
orjson 3.8.8 | |
packaging 23.0 | |
pandas 1.5.3 | |
pathtools 0.1.2 | |
peft 0.3.0.dev0 | |
Pillow 9.4.0 | |
pip 22.3.1 | |
platformdirs 3.1.0 | |
protobuf 3.20.1 | |
psutil 5.9.4 | |
py-cpuinfo 9.0.0 | |
py7zr 0.20.4 | |
pyarrow 11.0.0 | |
pyasn1 0.4.8 | |
pyasn1-modules 0.2.8 | |
pybcj 1.0.1 | |
pycares 4.3.0 | |
pycparser 2.21 | |
pycryptodomex 3.17 | |
pydantic 1.10.4 | |
pydub 0.25.1 | |
Pygments 2.14.0 | |
pyparsing 3.0.9 | |
pyppmd 1.0.0 | |
pyrsistent 0.19.3 | |
PySocks 1.7.1 | |
python-dateutil 2.8.2 | |
python-multipart 0.0.6 | |
pytz 2022.7.1 | |
PyYAML 6.0 | |
pyzstd 0.15.4 | |
ray 2.3.0 | |
regex 2022.10.31 | |
requests 2.28.2 | |
requests-oauthlib 1.3.1 | |
responses 0.18.0 | |
rfc3986 1.5.0 | |
rich 13.3.2 | |
rouge-score 0.1.2 | |
rsa 4.9 | |
scikit-learn 1.2.0 | |
scipy 1.10.1 | |
semantic-version 2.10.0 | |
sentencepiece 0.1.97 | |
sentry-sdk 1.16.0 | |
setproctitle 1.3.2 | |
setuptools 65.6.3 | |
six 1.16.0 | |
smart-open 6.3.0 | |
smmap 5.0.0 | |
sniffio 1.3.0 | |
soupsieve 2.4 | |
starlette 0.26.1 | |
tabulate 0.9.0 | |
tensorboard 2.12.0 | |
tensorboard-data-server 0.7.0 | |
tensorboard-plugin-wit 1.8.1 | |
termcolor 2.2.0 | |
texttable 1.6.7 | |
threadpoolctl 3.1.0 | |
tokenizers 0.13.2 | |
toolz 0.12.0 | |
torch 1.13.1 | |
torchtyping 0.1.4 | |
torchvision 0.14.1 | |
tqdm 4.65.0 | |
transformers 4.28.0.dev0 | |
trlx 0.3.0 | |
typeguard 2.13.3 | |
typing_extensions 4.5.0 | |
uc-micro-py 1.0.1 | |
urllib3 1.26.14 | |
uvicorn 0.21.1 | |
virtualenv 20.20.0 | |
wandb 0.13.10 | |
websockets 10.4 | |
Werkzeug 2.2.3 | |
wheel 0.38.4 | |
xxhash 3.2.0 | |
yarl 1.8.2 | |
``` | |
**3、输出乱码问题** | |
- https://github.com/Facico/Chinese-Vicuna/issues/2 | |
- 可以使用下面的测试代码,检验一下英文输入,英文输出,中文输入,中文输出等是否会有问题。如果有问题可能是transformers、tokenizers、sentencepiece等依赖版本的问题(参考上面配置),如果在终端输出解决了这个问题webui上应该是不会有问题的。 | |
- ```python | |
import sys | |
import torch | |
from peft import PeftModel | |
import transformers | |
from transformers import LlamaTokenizer, LlamaForCausalLM | |
tokenizer = LlamaTokenizer.from_pretrained("decapoda-research/llama-7b-hf") | |
BASE_MODEL = "decapoda-research/llama-7b-hf" | |
model = LlamaForCausalLM.from_pretrained( | |
BASE_MODEL, | |
load_in_8bit=True, | |
torch_dtype=torch.float16, | |
device_map="auto", | |
) | |
model.eval() | |
inputs = "Hello, Where is the capital of the United States?" #"你好,美国的首都在哪里?" | |
input_ids = tokenizer(inputs, return_tensors="pt")['input_ids'] | |
print(input_ids) | |
generation_output = model.generate( | |
input_ids=input_ids, | |
max_new_tokens=15, | |
) | |
print(generation_output) | |
print(tokenizer.decode(generation_output[0])) | |
model = PeftModel.from_pretrained( | |
model, | |
"./lora-Vicuna/checkpoint-4000", | |
torch_dtype=torch.float16, | |
device_map={'': 0} | |
) | |
inputs = "你好,中国的首都在哪里?" #"你好,美国的首都在哪里?" | |
input_ids = tokenizer(inputs, return_tensors="pt")['input_ids'] | |
print(input_ids) | |
generation_output = model.generate( | |
input_ids=input_ids, | |
max_new_tokens=15, | |
) | |
print(generation_output) | |
print(tokenizer.decode(generation_output[0])) | |
``` | |
- 因为这个是一个比较简单的例子,生成的时候没有加参数控制,在webui那里会有参数控制的,比如Repetition Penalty等 | |
**4、bitsandbytes报错** | |
由于peft这个仓库正在开发中,还存在很多问题。比如跑generate.py的时候,不去指定某一张卡,它能会在其他卡也分配显存。 | |
- 也有可能像问题2那样,有一张卡是坏的 | |
跑程序的时候请检查GPU的运行情况,如果跑单卡,请使用`CUDA_VISIBLE_DEVICES=0`(序号根据实际情况定) | |
[类似错误](https://github.com/deep-diver/Alpaca-LoRA-Serve/issues/28#issuecomment-1486081937) |