charent/ChatLM-mini-Chinese

如何运行呢?

meng25meng opened this issue · 17 comments

我按照流程已经将3.2的安装部分都安装成功,不知道下一步该如何训练呢?就是展示的对话不知道怎么去运行打开它?

训练请仔细阅读3.33.6章节。

复现展示的对话请阅读3.1章节(快速开始,模型文件会自动下载到系统的cache目录),3.7章节也可以(需要自己下载模型文件到指定目录)。

好的谢谢,1. 就是如果按照3.1步骤,这些代码是放在那个文件下运行呢?我有点不太懂,
2. 就是我看您发布的对话展示,也按照步骤进行,出现下边的报错,就是有点疑惑,把文件都下载完之后,需要手动更改里面有些文件的参数吗?下边是我运行那个cli-报错的。(base) PS C:\Users\Lenovo> cd E:\ChatLM\ChatLM-mini-Chinese
(base) PS E:\ChatLM\ChatLM-mini-Chinese> conda activate ChatLM_venv
(ChatLM_venv) PS E:\ChatLM\ChatLM-mini-Chinese> python cli_demo.py
Traceback (most recent call last):
File "D:\Anaconda\envs\ChatLM_venv\Lib\site-packages\transformers\utils\hub.py", line 389, in cached_file
resolved_file = hf_hub_download(
^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\ChatLM_venv\Lib\site-packages\huggingface_hub\utils_validators.py", line 110, in _inner_fn
validate_repo_id(arg_value)
File "D:\Anaconda\envs\ChatLM_venv\Lib\site-packages\huggingface_hub\utils_validators.py", line 158, in validate_repo_id
raise HFValidationError(
huggingface_hub.utils._validators.HFValidationError: Repo id must be in the form 'repo_name' or 'namespace/repo_name': 'E:/ChatLM/ChatLM-mini-Chinese/model_save/dpo_model/'. Use repo_type argument if needed.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "E:\ChatLM\ChatLM-mini-Chinese\cli_demo.py", line 13, in
chat_bot = ChatBot(infer_config=infer_config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\ChatLM\ChatLM-mini-Chinese\model\infer.py", line 25, in init
tokenizer = PreTrainedTokenizerFast.from_pretrained(infer_config.model_dir)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "D:\Anaconda\envs\ChatLM_venv\Lib\site-packages\transformers\tokenization_utils_base.py", line 1951, in from_pretrained
resolved_config_file = cached_file(
^^^^^^^^^^^^
File "D:\Anaconda\envs\ChatLM_venv\Lib\site-packages\transformers\utils\hub.py", line 454, in cached_file
raise EnvironmentError(
OSError: Incorrect path_or_model_id: 'E:/ChatLM/ChatLM-mini-Chinese/model_save/dpo_model/'. Please provide either the path to a local folder or the repo_id of a model on the Hub.您帮我简单看一下吗?

抱歉,我写的readme和config.py有矛盾的地方,我等会就修复这个问题。

请确保你已经从huggingface下载了以下文件:

ChatLM-mini-Chinese
├─model_save
|  ├─config.json
|  ├─configuration_chat_model.py
|  ├─generation_config.json
|  ├─model.safetensors
|  ├─modeling_chat_model.py
|  ├─special_tokens_map.json
|  ├─tokenizer.json
|  └─tokenizer_config.json

两个解决方法:

  1. 修改config.py文件,把class InferConfig:下的model_dir属性对应的内容由PROJECT_ROOT + '/model_save/dpo_model/' 改为PROJECT_ROOT + '/model_save/' ,即是删除dpo_model/这几个字符,,如下第二行
- model_dir: str = PROJECT_ROOT + '/model_save/dpo_model/' 
+  model_dir: str = PROJECT_ROOT + '/model_save/'
  1. 不修改config.py文件,在model_save目录下新建dpo_model文件夹,将下载的模型文件及tokenizer文件移动到dpo_model文件夹中。

以上两个办法任选一个。

问题已修复,可以通过git pull命令更新一下代码,抱歉给你造成了困扰。

忘了回你这个问题了

好的谢谢,1. 就是如果按照3.1步骤,这些代码是放在那个文件下运行呢?我有点不太懂

步骤3.1的代码你可以在jupyter notebook中运行,或者新建一个py文件,把3.1的代码复制、粘贴进去,python your_file.py就可以了。

感谢感谢,就是我的model-save里面的文件里除了您说的那几个全部,还有两个chat-model.py和chat-model-config.py两个文件,这两个多余会有影响吗?
2.我按照您说的第一个方法:在config.py里找到了class InferConfig:,我的代码里只有这一行model_dir改为model_save,下面是修改之后的:model_save: str = PROJECT_ROOT + '/model_save/dpo_model/',其余的没有变。不知道我理解的是否正确。
3.然后再次运行cli文件出现如下报错:
(ChatLM_venv) PS E:\ChatLM\ChatLM-mini-Chinese> python cli_demo.py
Traceback (most recent call last):
File "E:\ChatLM\ChatLM-mini-Chinese\cli_demo.py", line 13, in
chat_bot = ChatBot(infer_config=infer_config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "E:\ChatLM\ChatLM-mini-Chinese\model\infer.py", line 25, in init
tokenizer = PreTrainedTokenizerFast.from_pretrained(infer_config.model_dir)
^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'InferConfig' object has no attribute 'model_dir'
4.我的理解是:就是把所有model_dir改为model_save吗?这涉及的文件有点多。可能我的理解是错的

我可能表达得不是很准确。

是把model_dir: str = PROJECT_ROOT + '/model_save/dpo_model/'这一行改为 model_dir: str = PROJECT_ROOT + '/model_save/',即是,把dpo_model/这几个字符删掉就可以了,其他不用动。

你直接拉最新代码就能跑了。

感谢感谢,已经可以跑了,就是我还有一个疑问,如果想要训练成与自己专业相关的语料库,应该怎么做呢?就是模型他训练的文件该怎么放进去才能训练的更专业呢?

看具体需求,一般从sft微调阶段开始就可以了,专业语料会做成问答对的形式,方便做sft。通用语料:专业语料=3:7或者5:5,看具体情况,配比不是绝对的,加入通用语料防止灾难性遗忘。如果没有没有问答对形式的语料,那就是检索式生成RAG的范畴了。

谢谢您的指导,就是如果想利用这个模型给他提供一篇文字内容,下去训练他,然后对他提问,这个在那里实现呢?3.3-3.6就是有针对性的对自己专业领域东西进行训练吗?我就是目前不知道该如何把自己专业东西提供给他?

一篇文字内容是不够训练的,你这个使用场景建议看看langchain。朴素实现:先把文档分段、向量化到向量数据库,提问时先根据prompt去向量数据库检索最相似的文档片段,作为prompt的补充input,再把新的prompt(包括原始的prompt和检索出来的文档片段作为context)喂给模型让其回答,这不属于本项目的范畴。

谢谢您的指导,就是如果想利用这个模型给他提供一篇文字内容,下去训练他,然后对他提问,这个在那里实现呢?3.3-3.6就是有针对性的对自己专业领域东西进行训练吗?我就是目前不知道该如何把自己专业东西提供给他?

在我另外一个项目有RAG检索相关的例子,利用lanchain检索并回答文章的内容,你可以参考一下。rag_with_langchain.ipynb

谢谢您的指导,就是如果想利用这个模型给他提供一篇文字内容,下去训练他,然后对他提问,这个在那里实现呢?3.3-3.6就是有厕所的对自己专业领域的东西进行训练吗? ?我目前还不知道该把自己专业的东西提供给他?

在我的另外一个项目中有 RAG 搜索相关的例子,利用lanchain搜索并回答文章的内容,你可以参考一下。rag_with_langchain.ipynb

好的谢谢您,

文章文字内容还不够建议训练的,你这个使用场景看看langchain。朴素实现:先把文档架构、支撑化到支撑数据库,提问时先根据prompt支撑数据库搜索最相似的文档片段,作为提示的补充输入,再把新的提示(包括原始的提示和搜索出来的文档片段作为上下文)供给模型给出其答案,这不属于本项目的中心。

您好,我想再问一下,我最近通过你的帮助了解到了lanchain,然后发现有一个lanchain-chatGLM诉求与我想要的差不多,他们都是基于lanchain吗?我是需要先把lanchain创建好之后,在搭建lanchain-chatGLM?希望能得到你的帮助得常感谢,我在这方面不太擅长,能联系上你吗?可以邮件或者其他方式。

是基于langchain。langchang是一个工具,你这个场景下是创建文档的向量数据库,再根据提问的问题选出最相似的top k个文档片段,构造新的prompt,然后将prompt喂给chatglm/gpt等llm做推理就行,很多教程都是通过api调用的方式做llm推理,我上面给出的例子是直接加载模型做推理,效果都是一样的。langchain把这些流程都封装好了,直接用就可以了。不用langchain,你根据向量数据库的文档手搓一遍这个流程也是可以的。lanchain-chatGLM是教程很多,照着做就可以了。

忘记回你这个问题了

好的谢谢,1。就是如果按照3.1那个步骤,这些代码是放在文件下运行呢?我有点不太懂

步骤3.1的代码你可以在jupyter notebook运行中,或者新建一个py文件,把3.1的代码复制、粘贴进去,python your_file.py就可以了。

您好,我按照您的指导,用Python运行了,得到下面的结果,如果用这个3.1的代码如何进行提问呢?(ChatLM_venv) PS E:\ChatLM\ChatLM-mini-Chinese> python jp.py
tokenizer_config.json: 100%|██████████████████████████████████████████████████████| 1.42k/1.42k [00:00<00:00, 1.38MB/s]
D:\Anaconda\envs\ChatLM_venv\Lib\site-packages\huggingface_hub\file_download.py:149: UserWarning: huggingface_hub cache-system uses symlinks by default to efficiently store duplicated files but your machine does not support them in C:\Users\Lenovo.cache\huggingface\hub\models--charent--ChatLM-mini-Chinese. Caching files will still work but in a degraded version that might require more space on your disk. This warning can be disabled by setting the HF_HUB_DISABLE_SYMLINKS_WARNING environment variable. For more details, see https://huggingface.co/docs/huggingface_hub/how-to-cache#limitations.
To support symlinks on Windows, you either need to activate Developer Mode or to run Python as an administrator. In order to see activate developer mode, see this article: https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development
warnings.warn(message)
tokenizer.json: 100%|█████████████████████████████████████████████████████████████| 1.08M/1.08M [00:00<00:00, 1.31MB/s]
special_tokens_map.json: 100%|██████████████████████████████████████████████████████████████| 75.0/75.0 [00:00<?, ?B/s]
config.json: 100%|████████████████████████████████████████████████████████████████████████████| 803/803 [00:00<?, ?B/s]
modeling_chat_model.py: 100%|█████████████████████████████████████████████████████████████| 3.21k/3.21k [00:00<?, ?B/s]
A new version of the following files was downloaded from https://huggingface.co/charent/ChatLM-mini-Chinese:

  • modeling_chat_model.py
    . Make sure to double-check they do not contain any added malicious code. To avoid downloading new versions of the code file, you can pin a revision.
    model.safetensors: 100%|████████████████████████████████████████████████████████████| 751M/751M [01:09<00:00, 10.8MB/s]
    generation_config.json: 100%|██████████████████████████████████████████████████████████| 142/142 [00:00<00:00, 142kB/s]
    Apple是一家以设计和用户体验为核心的科技公司,其产品和服务在全球范围内受到广泛关注和赞誉。以下是对其评价的几个方面:
  1. 设计:作为一家注重用户体验的公司,其产品设计注重用户体验是其成功的重要因素之一。其产品界面简洁明了,易于使用,同时也 充分考虑了用户的需求。
  2. 用户忠诚度:作为一家忠实的用户,其忠诚度也是至关重要的。其产品在市场上的口碑和用户评价一直保持着较高的水平。
  3. 产品创新:作为一家不断推出新产品和服务的公司,苹果公司一直在不断推出新的产品和服务,以满足不断变化的用户需求。
  4. 品牌形象:作为一家以品牌形象为核心的企业,苹果公司一直致力于打造高品质的产品和优质的用户体验。
    总的来说,苹果公司在设计、用户体验、产品创新和品牌形象等方面都取得了巨大的成功,这些都是其在市场上备受推崇的原因。
    (ChatLM_venv) PS E:\ChatLM\ChatLM-mini-Chinese>

请仔细阅读你粘贴的代码,提问的prompt赋值在这一行:txt = '如何评价Apple这家公司?',你可以自己修改,或者改成从键盘输入都行,也可以参考:cli_demo.py