zjunlp / DeepKE

[EMNLP 2022] An Open Toolkit for Knowledge Graph Extraction and Construction
http://deepke.zjukg.cn/
MIT License
3.54k stars 684 forks source link

llm使用 #345

Closed whwususu closed 1 year ago

whwususu commented 1 year ago

image 源码有乱码,我改了下,可以了。生成了标准请求后,我调用哪个python命令,送入这个生成的processed.json来得到三元关系。 看了半天bash scripts/fine_llama.bash这个是来学习用的,就是没找到通过哪个命令得到output。感谢!

guihonghao commented 1 year ago

预测部分https://github.com/zjunlp/DeepKE/blob/main/example/llm/InstructKGC/README_CN.md#%E9%A2%84%E6%B5%8B 可以得到output

guihonghao commented 1 year ago

你可以通过下面的命令设置自己的参数执行来使用训练好的LoRA模型在比赛测试集上预测输出:

CUDA_VISIBLE_DEVICES="0" python src/inference.py \ --model_name_or_path 'Path or name to model' \ --model_name 'model name' \ --lora_weights 'Path to LoRA weights dictory' \ --input_file 'data/valid.json' \ --output_file 'results/results_valid.json' \ --fp16 \ --bits 8 1.注意!!--fp16 或 --bf16、--bits、--prompt_template_name、--model_name一定要与微调时设置的一样

也可以使用训练好的模型(无Lora或Lora已合并进模型参数中)在比赛测试集上预测输出:

CUDA_VISIBLE_DEVICES="0" python src/inference.py \ --model_name_or_path 'Path or name to model' \ --model_name 'model name' \ --input_file 'data/valid.json' \ --output_file 'results/results_valid.json' \ --fp16 \ --bits 8 以下模型支持上述方法: zjunlp/knowlm-13b-zhixi | zjunlp/knowlm-13b-ie

whwususu commented 1 year ago

你可以通过下面的命令设置自己的参数执行来使用训练好的LoRA模型在比赛测试集上预测输出:

CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --lora_weights 'Path to LoRA weights dictory' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 1.注意!!--fp16 或 --bf16、--bits、--prompt_template_name、--model_name一定要与微调时设置的一样

也可以使用训练好的模型(无Lora或Lora已合并进模型参数中)在比赛测试集上预测输出:

CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 以下模型支持上述方法: zjunlp/knowlm-13b-zhixi | zjunlp/knowlm-13b-ie

嗯,感谢,我已经看到相关说明,但是这个llm模型太大了,还没搞下来,搞下来我来试试。微调这个就需要大量数据了。

whwususu commented 1 year ago

你可以通过下面的命令设置自己的参数执行来使用训练好的LoRA模型在比赛测试集上预测输出:

CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --lora_weights 'Path to LoRA weights dictory' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 1.注意!!--fp16 或 --bf16、--bits、--prompt_template_name、--model_name一定要与微调时设置的一样

也可以使用训练好的模型(无Lora或Lora已合并进模型参数中)在比赛测试集上预测输出:

CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 以下模型支持上述方法: zjunlp/knowlm-13b-zhixi | zjunlp/knowlm-13b-ie

data/valid.json是这个格式吗?

{"id": 0, "cate": "建筑", "input": "韦瓦克机场(英文:Wewak Airport)又叫博勒姆机场(Boram Airport),是一座位于巴布亚新几内亚韦瓦克的机场。IATA代码:WWK;ICAO代码:AYWK。", "output": "(韦瓦克机场,位于,韦瓦克),(韦瓦克,位于,巴布亚新几内亚),(韦瓦克机场,别名,Wewak Airport),(韦瓦克机场,别名,博勒姆机场),(韦瓦克机场,别名,Boram Airport),(韦瓦克机场,类型,机场)", "instruction": "已知候选的关系列表:['位于', '别名', '类型'],请你根据关系列表,从以下输入中抽取出可能存在的头实体(Subject)与尾实体(Object),并给出对应的关系三元组。请按照 (Subject,Relation,Object) 的格式回答。", "relation": [{"head": "韦瓦克机场", "relation": "位于", "tail": "韦瓦克"}, {"head": "韦瓦克", "relation": "位于", "tail": "巴布亚新几内亚"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "Wewak Airport"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "博勒姆机场"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "Boram Airport"}, {"head": "韦瓦克机场", "relation": "类型", "tail": "机场"}]} {"id": 1, "cate": "建筑", "input": "旧铁路桥是塞尔维亚首都贝尔格莱德的一座桥梁,横跨萨瓦河。这座桥梁是贝尔格莱德首座铁路桥,直到1935年为止也是贝尔格莱德唯一的一座铁路桥。在两次世界大战期间,旧铁路桥都曾经被拆除。", "output": "(旧铁路桥,位于,贝尔格莱德),(贝尔格莱德,位于,塞尔维亚),(旧铁路桥,成就,贝尔格莱德首座铁路桥),(旧铁路桥,类型,桥梁)", "instruction": "已知候选的关系列表:['位于', '成就', '类型'],请你根据关系列表,从以下输入中抽取出可能存在的头实体(Subject)与尾实体(Object),并给出对应的关系三元组。请按照 (Subject,Relation,Object) 的格式回答。", "relation": [{"head": "旧铁路桥", "relation": "位于", "tail": "贝尔格莱德"}, {"head": "贝尔格莱德", "relation": "位于", "tail": "塞尔维亚"}, {"head": "旧铁路桥", "relation": "成就", "tail": "贝尔格莱德首座铁路桥"}, {"head": "旧铁路桥", "relation": "类型", "tail": "桥梁"}]}

whwususu commented 1 year ago

image gpu设置好像有问题,怎么设置呢

guihonghao commented 1 year ago

model_name_orpath是否存在禁止的字符?将'-'改成''试试

guihonghao commented 1 year ago

你可以通过下面的命令设置自己的参数执行来使用训练好的LoRA模型在比赛测试集上预测输出: CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --lora_weights 'Path to LoRA weights dictory' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 1.注意!!--fp16 或 --bf16、--bits、--prompt_template_name、--model_name一定要与微调时设置的一样 也可以使用训练好的模型(无Lora或Lora已合并进模型参数中)在比赛测试集上预测输出: CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 以下模型支持上述方法: zjunlp/knowlm-13b-zhixi | zjunlp/knowlm-13b-ie

data/valid.json是这个格式吗?

{"id": 0, "cate": "建筑", "input": "韦瓦克机场(英文:Wewak Airport)又叫博勒姆机场(Boram Airport),是一座位于巴布亚新几内亚韦瓦克的机场。IATA代码:WWK;ICAO代码:AYWK。", "output": "(韦瓦克机场,位于,韦瓦克),(韦瓦克,位于,巴布亚新几内亚),(韦瓦克机场,别名,Wewak Airport),(韦瓦克机场,别名,博勒姆机场),(韦瓦克机场,别名,Boram Airport),(韦瓦克机场,类型,机场)", "instruction": "已知候选的关系列表:['位于', '别名', '类型'],请你根据关系列表,从以下输入中抽取出可能存在的头实体(Subject)与尾实体(Object),并给出对应的关系三元组。请按照 (Subject,Relation,Object) 的格式回答。", "relation": [{"head": "韦瓦克机场", "relation": "位于", "tail": "韦瓦克"}, {"head": "韦瓦克", "relation": "位于", "tail": "巴布亚新几内亚"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "Wewak Airport"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "博勒姆机场"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "Boram Airport"}, {"head": "韦瓦克机场", "relation": "类型", "tail": "机场"}]} {"id": 1, "cate": "建筑", "input": "旧铁路桥是塞尔维亚首都贝尔格莱德的一座桥梁,横跨萨瓦河。这座桥梁是贝尔格莱德首座铁路桥,直到1935年为止也是贝尔格莱德唯一的一座铁路桥。在两次世界大战期间,旧铁路桥都曾经被拆除。", "output": "(旧铁路桥,位于,贝尔格莱德),(贝尔格莱德,位于,塞尔维亚),(旧铁路桥,成就,贝尔格莱德首座铁路桥),(旧铁路桥,类型,桥梁)", "instruction": "已知候选的关系列表:['位于', '成就', '类型'],请你根据关系列表,从以下输入中抽取出可能存在的头实体(Subject)与尾实体(Object),并给出对应的关系三元组。请按照 (Subject,Relation,Object) 的格式回答。", "relation": [{"head": "旧铁路桥", "relation": "位于", "tail": "贝尔格莱德"}, {"head": "贝尔格莱德", "relation": "位于", "tail": "塞尔维亚"}, {"head": "旧铁路桥", "relation": "成就", "tail": "贝尔格莱德首座铁路桥"}, {"head": "旧铁路桥", "relation": "类型", "tail": "桥梁"}]}

这个不能作为inference.py的-input_file文件,你需要参考下面的文件转换。

模型的输入需要包含instruction和input(可选)字段, 我们在 kg2instruction/convert.pykg2instruction/convert_test.py 提供了一个脚本,用于将数据统一转换为可以直接输入模型的格式。

请注意!在执行 kg2instruction/convert.py 之前,请参考 data 目录, 其中包含了每种任务的预期数据格式。

guihonghao commented 1 year ago

你可以通过下面的命令设置自己的参数执行来使用训练好的LoRA模型在比赛测试集上预测输出: CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --lora_weights 'Path to LoRA weights dictory' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 1.注意!!--fp16 或 --bf16、--bits、--prompt_template_name、--model_name一定要与微调时设置的一样 也可以使用训练好的模型(无Lora或Lora已合并进模型参数中)在比赛测试集上预测输出: CUDA_VISIBLE_DEVICES="0" python src/inference.py --model_name_or_path 'Path or name to model' --model_name 'model name' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 以下模型支持上述方法: zjunlp/knowlm-13b-zhixi | zjunlp/knowlm-13b-ie

data/valid.json是这个格式吗? {"id": 0, "cate": "建筑", "input": "韦瓦克机场(英文:Wewak Airport)又叫博勒姆机场(Boram Airport),是一座位于巴布亚新几内亚韦瓦克的机场。IATA代码:WWK;ICAO代码:AYWK。", "output": "(韦瓦克机场,位于,韦瓦克),(韦瓦克,位于,巴布亚新几内亚),(韦瓦克机场,别名,Wewak Airport),(韦瓦克机场,别名,博勒姆机场),(韦瓦克机场,别名,Boram Airport),(韦瓦克机场,类型,机场)", "instruction": "已知候选的关系列表:['位于', '别名', '类型'],请你根据关系列表,从以下输入中抽取出可能存在的头实体(Subject)与尾实体(Object),并给出对应的关系三元组。请按照 (Subject,Relation,Object) 的格式回答。", "relation": [{"head": "韦瓦克机场", "relation": "位于", "tail": "韦瓦克"}, {"head": "韦瓦克", "relation": "位于", "tail": "巴布亚新几内亚"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "Wewak Airport"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "博勒姆机场"}, {"head": "韦瓦克机场", "relation": "别名", "tail": "Boram Airport"}, {"head": "韦瓦克机场", "relation": "类型", "tail": "机场"}]} {"id": 1, "cate": "建筑", "input": "旧铁路桥是塞尔维亚首都贝尔格莱德的一座桥梁,横跨萨瓦河。这座桥梁是贝尔格莱德首座铁路桥,直到1935年为止也是贝尔格莱德唯一的一座铁路桥。在两次世界大战期间,旧铁路桥都曾经被拆除。", "output": "(旧铁路桥,位于,贝尔格莱德),(贝尔格莱德,位于,塞尔维亚),(旧铁路桥,成就,贝尔格莱德首座铁路桥),(旧铁路桥,类型,桥梁)", "instruction": "已知候选的关系列表:['位于', '成就', '类型'],请你根据关系列表,从以下输入中抽取出可能存在的头实体(Subject)与尾实体(Object),并给出对应的关系三元组。请按照 (Subject,Relation,Object) 的格式回答。", "relation": [{"head": "旧铁路桥", "relation": "位于", "tail": "贝尔格莱德"}, {"head": "贝尔格莱德", "relation": "位于", "tail": "塞尔维亚"}, {"head": "旧铁路桥", "relation": "成就", "tail": "贝尔格莱德首座铁路桥"}, {"head": "旧铁路桥", "relation": "类型", "tail": "桥梁"}]}

这个不能作为inference.py的-input_file文件,你需要参考下面的文件转换。

模型的输入需要包含instruction和input(可选)字段, 我们在 kg2instruction/convert.pykg2instruction/convert_test.py 提供了一个脚本,用于将数据统一转换为可以直接输入模型的格式。

请注意!在执行 kg2instruction/convert.py 之前,请参考 data 目录, 其中包含了每种任务的预期数据格式。

这个在README的 2.数据

建议您完整地阅读我们的README。

whwususu commented 1 year ago

model_name_orpath是否存在禁止的字符?将'-'改成''试试

image 还是不行

guihonghao commented 1 year ago

为什么model_name_or_path、model_name、lora_weights、input_file、output_dile都是双重引号"''"?这样是否合规?

guihonghao commented 1 year ago

我们提供的预测参考脚本是以下格式

CUDA_VISIBLE_DEVICES="0" python src/inference.py \
    --model_name_or_path 'models/llama-7b' \
    --model_name 'llama' \
    --lora_weights 'lora/llama-7b-8bit' \
    --input_file 'data/valid.json' \
    --output_file 'results/llama-valid.json' \
    --fp16 \
    --bits 8 

或许windows环境下不需要引号或需要双引号",即

CUDA_VISIBLE_DEVICES="0" python src/inference.py \
    --model_name_or_path models/llama-7b \
    --model_name llama \
    --lora_weights lora/llama-7b-8bit \
    --input_file data/valid.json \
    --output_file results/llama-valid.json \
    --fp16 \
    --bits 8 
whwususu commented 1 year ago

del_name、lora_weights、input_file、output_dile

python src/inference.py --model_name_or_path 'llama_7b_hf' --model_name 'llama' --lora_weights 'alpaca_7b_lora_ie' --input_file 'data/valid.json' --output_file 'results/results_valid.json' --fp16 --bits 8 是单引号的命令

guihonghao commented 1 year ago

试试去掉引号或双引号

whwususu commented 1 year ago

image 嗯,引号去掉就能运行了,不过报错了,分词不对?

guihonghao commented 1 year ago

不是分词不对。可能是显存不够导致模型的modules分配到的GPU和CPU两个地方。你试试把--bits 8 改成--bits 4看看

whwususu commented 1 year ago

不是分词不对。可能是显存不够导致模型的modules分配到的GPU和CPU两个地方。你试试把--bits 8 改成--bits 4看看

感谢,换了4还是那个错误,我换个机器试试

whwususu commented 1 year ago

不是分词不对。可能是显存不够导致模型的modules分配到的GPU和CPU两个地方。你试试把--bits 8 改成--bits 4看看

感谢,换了4还是那个错误,我换个机器试试

换了机器后,还是这个错误 image

guihonghao commented 1 year ago

将device_setting = "auto"改成device_setting = {"": 0},在python前添加CUDA_VISIBLE_DEVICES="1",即CUDA_VISIBLE_DEVICES="1" python src/inference.py,试试。另外你的GPU显存是多大?

whwususu commented 1 year ago

将device_setting = "auto"改成device_setting = {"": 0},在python前添加CUDA_VISIBLE_DEVICES="1",即CUDA_VISIBLE_DEVICES="1" python src/inference.py,试试。另外你的GPU显存是多大?

CUDA_VISIBLE_DEVICES改了,显卡是GeForce GT 1030

guihonghao commented 1 year ago

这个显卡的显存好像只有2GB,太小了,不太适合跑7B及以上的大模型哦。

whwususu commented 1 year ago

这个显卡的显存好像只有2GB,太小了,不太适合跑7B及以上的大模型哦。

明白,感谢,我去申请下