CSHaitao / LexiLaw

LexiLaw - 中文法律大模型
MIT License
734 stars 97 forks source link

model/LexiLaw 目录下文件层级和三种推理方式的运行问题 (Updated) #14

Open treya-lin opened 1 year ago

treya-lin commented 1 year ago

Hi,可以分享一下你的 model 下的目录文件层级具体是怎样吗?如果可以直接 tree -L 2 model/LexiLaw 看一下开发者本地文件层级是怎样就好了,谢谢!

我目前是这样:

LexiLaw# tree -L 2 model/LexiLaw
model/LexiLaw
├── LexiLaw_finetune
│   ├── pytorch_model-00001-of-00002.bin
│   └── pytorch_model-00002-of-00002.bin
├── LexiLaw_lora
│   ├── adapter_config.json
│   └── adapter_model.bin
└── LexiLaw_ptuning
    └── pytorch_model.bin

文档里说的我有点没太明白。

LexiLaw_finetune:包含pytorch_model-00001-of-00002.bin和pytorch_model-00002-of-00002.bin两个文件,其他配置文件与ChatGLM一致。百度网盘链接(提取码: nmjp) LexiLaw_Ptuningv2:包含pytorch_model.bin。 LexiLaw_LoRA:包含adapter_model.bin和adapter_config.json两个文件。

意思是 LexiLaw_finetune 文件里我需要放入 chatglm-6b内除bin文件以外的所有文件吗?那么另外两个 LexiLaw_ptuning 和 LexiLaw_lora 呢?

# chatglm-6b 原始层级
$ tree -L 2 ../models/THUDM/chatglm-6b/
../models/THUDM/chatglm-6b/
├── LICENSE
├── MODEL_LICENSE
├── README.md
├── config.json
├── configuration_chatglm.py
├── ice_text.model
├── modeling_chatglm.py
├── pytorch_model-00001-of-00008.bin
├── pytorch_model-00002-of-00008.bin
├── pytorch_model-00003-of-00008.bin
├── pytorch_model-00004-of-00008.bin
├── pytorch_model-00005-of-00008.bin
├── pytorch_model-00006-of-00008.bin
├── pytorch_model-00007-of-00008.bin
├── pytorch_model-00008-of-00008.bin
├── pytorch_model.bin.index.json
├── quantization.py
├── test_modeling_chatglm.py
├── tokenization_chatglm.py
└── tokenizer_config.json

另外,model/LexiLaw 主目录下还需要别的什么文件吗?

treya-lin commented 1 year ago

关于文件层级的问题

Quick update:

  1. 我重新下载了百度网盘链接,里面有完整的应该放在LexiLaw_finetune 内的文件。直接用chatglm-6b里面的文件的话会报错的。
  2. 正确的文件层级应该是 model/${模型名},中间不要增加LexiLaw的中间目录。文档里的意思应该是:想用哪个模型就把目录里的内容放进 model/LexiLaw?不过我把三个都下载了,所以有点没搞明白层级关系。

请问如下布局正确吗?LexiLaw_finetune 目录放进 model, 改名 LexiLaw;LexiLaw_lora 目录改名为adapter 放进 model下, LexiLaw_ptuning 目录改名 ptuning,放在主目录下?

# tree -L 1 model/LexiLaw ptuning model/adapter
model/LexiLaw
├── config.json
├── configuration_chatglm.py
├── generation_config.json
├── ice_text.model
├── modeling_chatglm.py
├── pytorch_model-00001-of-00002.bin
├── pytorch_model-00002-of-00002.bin
├── pytorch_model.bin.index.json
├── quantization.py
├── test_modeling_chatglm.py
├── tokenization_chatglm.py
├── tokenizer_config.json
└── trainer_state.json
ptuning
└── pytorch_model.bin
model/adapter
├── adapter_config.json
└── adapter_model.bin

另外: 运行前记得先修改环境变量!

export PYTHONPATH=$PWD/src:$PYTHONPATH

关于三种推理方法的测试

我不确定ptuning和lora我的运行方法是否有误,ptuning目前报错,lora感觉效果比文档差。

finetune

===================================BUG REPORT=================================== Welcome to bitsandbytes. For bug reports, please run

python -m bitsandbytes

and submit this information together with your error trace to: https://github.com/TimDettmers/bitsandbytes/issues

bin /opt/conda/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cuda116.so /opt/conda/lib/python3.10/site-packages/bitsandbytes/cuda_setup/main.py:145: UserWarning: WARNING: The following directories listed in your path were found to be non-existent: {PosixPath('/usr/local/nvidia/lib'), PosixPath('/usr/local/nvidia/lib64')} warn(msg) /opt/conda/lib/python3.10/site-packages/bitsandbytes/cuda_setup/main.py:145: UserWarning: /usr/local/nvidia/lib:/usr/local/nvidia/lib64 did not contain ['libcudart.so', 'libcudart.so.11.0', 'libcudart.so.12.0'] as expected! Searching further paths... warn(msg) CUDA_SETUP: WARNING! libcudart.so not found in any environmental path. Searching in backup paths... /opt/conda/lib/python3.10/site-packages/bitsandbytes/cuda_setup/main.py:145: UserWarning: Found duplicate ['libcudart.so', 'libcudart.so.11.0', 'libcudart.so.12.0'] files: {PosixPath('/usr/local/cuda/lib64/libcudart.so'), PosixPath('/usr/local/cuda/lib64/libcudart.so.11.0')}.. We'll flip a coin and try one of these, in order to fail forward. Either way, this might cause trouble in the future: If you get CUDA error: invalid device function errors, the above might be the cause and the solution is to make sure only one ['libcudart.so', 'libcudart.so.11.0', 'libcudart.so.12.0'] in the paths that we search based on your env. warn(msg) CUDA SETUP: CUDA runtime path found: /usr/local/cuda/lib64/libcudart.so CUDA SETUP: Highest compute capability among GPUs detected: 8.0 CUDA SETUP: Detected CUDA version 116 CUDA SETUP: Loading binary /opt/conda/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cuda116.so... The argument trust_remote_code is to be used with Auto classes. It has no effect here and is ignored. Loading checkpoint shards: 100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:06<00:00, 3.37s/it] Some weights of the model checkpoint at model/LexiLaw were not used when initializing ChatGLMForConditionalGeneration: ['lm_head.0.weight']

lora

Input: 施工方超过国家规定标准排放噪声,是否应当承担责任? 施工方超过国家规定标准排放噪声,是否应当承担责任? 根据《社会法-特种设备安全监督检查办法》第十九条规定,违反本办法第八十九条的规定,违反本办法第十九条的规定,违反本办法第十九条的规定,构成犯罪的,依法追究刑事责任。因此,施工方应当承担违反国家规定标准排放噪声的法律责任。

lora这个推理结果好像不如文档里显示的好,知道是为什么吗?是我运行的方式有问题吗?
另外,我之前没有用过lora,请教一下,请问这种运行方式,从这个脚本的参数看:

argparser.add_argument("--base_model", type=str, default="model/LexiLaw") argparser.add_argument("--adapter", type=str, default="model/adapter")

是指将 lexilaw_finetune 模型作为base_model,lexilaw_lora 作为 adapter吗?我这样放是对的吗?还是说我其实应该将 chatglm-6b作为base,然后adapter用lexilaw_lora 才对...

alright, 我试了一下 inference_lora.py 以 chatglm-6b 为base,这次好像好多了,但是法条的引用还是和文档不太一样呢。

$ python inference_lora.py --base_model model/chatglm-6b Input: 谁可以申请撤销监护人的监护资格? 谁可以申请撤销监护人的监护资格? 1、被撤销监护人的,自撤销监护人资格之日起,由监护人依法向人民法院申请撤销监护人资格。2、法律依据:《中华人民共和国民法通则》第一百四十九条被撤销监护人的,自撤销监护人资格之日起,由监护人依法向人民法院申请撤销监护人资格。

Input: 施工方超过国家规定标准排放噪声,是否应当承担责任? 施工方超过国家规定标准排放噪声,是否应当承担责任? 施工方超过国家规定标准排放噪声,属于违反《中华人民共和国环境噪声法》的相关规定,应当承担相应的法律责任。根据《中华人民共和国环境噪声法》第一条规定,“环境噪声污染是中华人民共和国公民、法人和其他组织共同面临的严重问题,必须依法予以解决。任何组织和个人不得非法干扰、破坏生态环境,不得非法排放、处置、利用噪声。任何组织和个人不得非法收集、利用噪声。任何组织和个人不得非法向环境噪声污染的排放源、排放点排放噪声,不得向噪声排放源、排放点排放含有高噪声的固体、液体、气体、流体等噪声源的固体、液体、气体、流体等噪声。任何组织和个人不得以任何形式向噪声排放源、排放点排放含有高噪声的固体、液体、气体、流体等噪声源的固体、液体、气体、流体等噪声。任何组织和个人不得以任何形式向噪声排放源、排放点排放含有高噪声的固体、液体、气体、流体等噪声源的固体、液体、气体、流体等噪声。任何组织和个人不得以任何形式向噪声排放源、排放点排放含有高噪声的固体、液体、气体、流体等噪声源的固体、液体、气体、流体等噪声



问题有点多,谢谢!
CSHaitao commented 1 year ago

没事,lora应该是chatglm-6B作为推导,inference_ptuning好像有点问题,我之后再检查更新一下

treya-lin commented 1 year ago

没事,lora应该是chatglm-6B作为推导,inference_ptuning好像有点问题,我之后再检查更新一下

好的,所以lora的正确用法是这样吗?

python inference_lora.py --base_model model/chatglm-6b

同时 model/chatglm-6b 和 model/adapter(实为 lexilaw_lora) 里面是这样的内容,对吗?

model/chatglm-6b
|-- LICENSE
|-- MODEL_LICENSE
|-- README.md
|-- config.json
|-- configuration_chatglm.py
|-- ice_text.model
|-- modeling_chatglm.py
|-- pytorch_model-00001-of-00008.bin
|-- pytorch_model-00002-of-00008.bin
|-- pytorch_model-00003-of-00008.bin
|-- pytorch_model-00004-of-00008.bin
|-- pytorch_model-00005-of-00008.bin
|-- pytorch_model-00006-of-00008.bin
|-- pytorch_model-00007-of-00008.bin
|-- pytorch_model-00008-of-00008.bin
|-- pytorch_model.bin.index.json
|-- quantization.py
|-- test_modeling_chatglm.py
|-- tokenization_chatglm.py
`-- tokenizer_config.json
model/adapter
|-- adapter_config.json
`-- adapter_model.bin
yincangshiwei commented 1 year ago

没事,lora应该是chatglm-6B作为推导,inference_ptuning好像有点问题,我之后再检查更新一下

好的,所以lora的正确用法是这样吗?

python inference_lora.py --base_model model/chatglm-6b

同时 model/chatglm-6b 和 model/adapter(实为 lexilaw_lora) 里面是这样的内容,对吗?

model/chatglm-6b
|-- LICENSE
|-- MODEL_LICENSE
|-- README.md
|-- config.json
|-- configuration_chatglm.py
|-- ice_text.model
|-- modeling_chatglm.py
|-- pytorch_model-00001-of-00008.bin
|-- pytorch_model-00002-of-00008.bin
|-- pytorch_model-00003-of-00008.bin
|-- pytorch_model-00004-of-00008.bin
|-- pytorch_model-00005-of-00008.bin
|-- pytorch_model-00006-of-00008.bin
|-- pytorch_model-00007-of-00008.bin
|-- pytorch_model-00008-of-00008.bin
|-- pytorch_model.bin.index.json
|-- quantization.py
|-- test_modeling_chatglm.py
|-- tokenization_chatglm.py
`-- tokenizer_config.json
model/adapter
|-- adapter_config.json
`-- adapter_model.bin

你好,请问是不是要装chatglm-6b进去项目里面才能使用。

treya-lin commented 1 year ago

没事,lora应该是chatglm-6B作为推导,inference_ptuning好像有点问题,我之后再检查更新一下

好的,所以lora的正确用法是这样吗?

python inference_lora.py --base_model model/chatglm-6b

同时 model/chatglm-6b 和 model/adapter(实为 lexilaw_lora) 里面是这样的内容,对吗?

model/chatglm-6b
|-- LICENSE
|-- MODEL_LICENSE
|-- README.md
|-- config.json
|-- configuration_chatglm.py
|-- ice_text.model
|-- modeling_chatglm.py
|-- pytorch_model-00001-of-00008.bin
|-- pytorch_model-00002-of-00008.bin
|-- pytorch_model-00003-of-00008.bin
|-- pytorch_model-00004-of-00008.bin
|-- pytorch_model-00005-of-00008.bin
|-- pytorch_model-00006-of-00008.bin
|-- pytorch_model-00007-of-00008.bin
|-- pytorch_model-00008-of-00008.bin
|-- pytorch_model.bin.index.json
|-- quantization.py
|-- test_modeling_chatglm.py
|-- tokenization_chatglm.py
`-- tokenizer_config.json
model/adapter
|-- adapter_config.json
`-- adapter_model.bin

你好,请问是不是要装chatglm-6b进去项目里面才能使用。

Hi. 如果是使用lexilaw_lora方法的话需要也下载chatglm-6b模型。如果是用lexilaw_finetune的话不需要另外下载chatglm-6b

AlphaNext commented 1 year ago

@treya-lin python inference_ptuning.py 的方式,我也遇到类似的问题,把https://github.com/CSHaitao/LexiLaw/blob/main/inference_ptuning.py#L44-L56 改为下面这种方式应该就能运行了,你可以试试。

config = AutoConfig.from_pretrained(args.base_model, trust_remote_code=True)
config.pre_seq_len = 128
config.prefix_projection = True
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModel.from_pretrained(model_path, config=config, trust_remote_code=True)
new_prefix_state_dict = {}
prefix_state_dict = torch.load(args.ptuning)
for k, v in prefix_state_dict.items():
    new_prefix_state_dict[k[len("transformer.prefix_encoder."):]] = v
model.transformer.prefix_encoder.load_state_dict(new_prefix_state_dict)
ucas010 commented 1 year ago

同问,模型文件不知道咋放的,大佬解决没?麻烦告知下。

Trevo1 commented 1 year ago

没事,lora应该是chatglm-6B作为推导,inference_ptuning好像有点问题,我之后再检查更新一下

好的,所以lora的正确用法是这样吗?

python inference_lora.py --base_model model/chatglm-6b

同时 model/chatglm-6b 和 model/adapter(实为 lexilaw_lora) 里面是这样的内容,对吗?

model/chatglm-6b
|-- LICENSE
|-- MODEL_LICENSE
|-- README.md
|-- config.json
|-- configuration_chatglm.py
|-- ice_text.model
|-- modeling_chatglm.py
|-- pytorch_model-00001-of-00008.bin
|-- pytorch_model-00002-of-00008.bin
|-- pytorch_model-00003-of-00008.bin
|-- pytorch_model-00004-of-00008.bin
|-- pytorch_model-00005-of-00008.bin
|-- pytorch_model-00006-of-00008.bin
|-- pytorch_model-00007-of-00008.bin
|-- pytorch_model-00008-of-00008.bin
|-- pytorch_model.bin.index.json
|-- quantization.py
|-- test_modeling_chatglm.py
|-- tokenization_chatglm.py
`-- tokenizer_config.json
model/adapter
|-- adapter_config.json
`-- adapter_model.bin

你好,请问是不是要装chatglm-6b进去项目里面才能使用。

Hi. 如果是使用lexilaw_lora方法的话需要也下载chatglm-6b模型。如果是用lexilaw_finetune的话不需要另外下载chatglm-6b

啊,我用的是lexilaw_finetune的模型然后运行的lora🤣,先看看效果吧,不行我就换chatglm-6b的模型

lcy412 commented 1 month ago

大佬们解决了吗