ChatYuan: 元语功能型对话大模型
ChatYuan-large-v2
是一个支持中英双语的功能型对话语言大模型,是继ChatYuan系列中ChatYuan-large-v1
开源后的又一个开源模型。ChatYuan-large-v2使用了和 v1版本相同的技术方案,在微调数据、人类反馈强化学习、思维链等方面进行了优化。
ChatYuan-large-v2是ChatYuan系列中以轻量化实现高质量效果的模型之一,用户可以在消费级显卡、 PC甚至手机上进行推理(INT4 最低只需 400M )。
在chatyuan-large-v1的原有功能的基础上,我们给模型进行了如下优化:
- 增强了基础能力。原有上下文问答、创意性写作能力明显提升。
- 新增了拒答能力。对于一些危险、有害的问题,学会了拒答处理。
- 新增了代码生成功能。对于基础代码生成进行了一定程度优化。
- 新增了表格生成功能。使生成的表格内容和格式更适配。
- 增强了基础数学运算能力。
- 最大长度token数扩展到4096。
- 增强了模拟情景能力。
- 新增了中英双语对话能力。
👀 PromptCLUE-large在1000亿token中文语料上预训练, 累计学习1.5万亿中文token, 并且在数百种任务上进行Prompt任务式训练. 针对理解类任务, 如分类、情感分析、抽取等, 可以自定义标签体系; 针对多种生成任务, 可以进行采样自由生成。
前言
近日大型开源语言模型遍地开花,就目前来看,如果能够收集所有用户的对话数据,那么超越并不open的openAI可能只是时间问题,本站现提供第3个开源语言模型ChatYuan,该模型支持API和编程等方式进行调试,效果也还算说的过去,欢迎体验。
GitHub
项目开源地址:clue-ai/ChatYuan: ChatYuan
部署教程
下载
如果您是初学者,对于命令行不太理解,那么请按下键盘上的Win键+R键
后,在弹出的新窗口内输入CMD并按下回车,打开CMD窗口,按顺序执行如下的每一条命令。
首先我们需要确认一个工作目录,用来存放ChatYuan
的相关文件。本站所选择的目录为D盘的根目录下openai.wiki文件夹,完整路径为:D:\openai.wiki
。
1.检测D盘是否在openai.wiki
,没有则创建该文件夹。
if not exist D:\openai.wiki mkdir D:\openai.wiki
2.强制切换工作路径为D盘的openai.wiki
文件夹。
cd /d D:\openai.wiki
3.拉取Github仓库文件夹,将下载至openai.wiki
文件夹。
git clone https://github.com/clue-ai/ChatYuan.git
注意:如果您无法完成第3步,执行后报错或者无法下载,可以下载该文件将其解压至D:\openai.wiki
即可。
环境安装
为不影响电脑中的现有环境,请一定要安装Conda,如果您不知道什么是Conda,或者未安装过Conda,请参考如下文章,安装部署Conda之后再继续以下步骤。
在CMD中执行下面的命令行,创建Conda虚拟环境至该项目的目录中,方便日后重装系统也能够正常使用,无需重新部署环境。
conda create -p D:\openai.wiki\ChatYuan\MyENV
执行完成上面的命令之后,将会在CMD窗口中看到Proceed ([y]/n)?
提示,我们直接按下回车即可。
初始化Conda环境,避免后续可能报错。
conda init cmd.exe
激活已创建的Conda环境,这样我们可以将我们后续所需要的所有环境依赖都安装至此环境下。
conda activate D:\openai.wiki\ChatYuan\MyENV
为避免出现问题,我们再次强制切换至ChatYuan的项目路径,确保一切可以正常安装。
cd /d D:\openai.wiki\ChatYuan
PyTorch
虽然官方没有说要安装PyTorch,但还是需要安装的,不然启动时必然会报错。
在安装PyTorch之前,您需要先前往官网(PyTorch)查看自己应该安装哪个版本。
请您像下图一样按顺序选择即可,依次选择Stable->Windows->Conda->Python->CUDA 11.8。
其中的Stable其实就是稳定版的PyTorch,Preview(Nightly)是每天更新的预览测试版,可能存在未知Bug,所以最好选择Stable版本。
如果您看到的不是CUDA 11.8,而是CUDA 11.9或更高的版本也没关系,只要前缀是CUDA即可。
在您按顺序选择好之后,复制下面的<Run this Command>的内容即可,例如本站所得到的为:
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia将您所复制的代码直接粘贴至CMD窗口内执行,此时将会自动安装PyTorch和对应版本的CUDA,因为PyTorch比较大,所以等待时间会比较长,请不要中断该操作。
注意:一定要复制你自己得到的,尽量不要直接使用本站所给出的示例命令行!
安装ChatYuan项目的相关依赖库,此步骤可能需要稍等几分钟才能够安装完成。
pip install clueai==0.0.2.2.4 gradio==3.20.1 transformers==4.26.1
此时我们还需要安装T5Tokenizer的SentencePiece依赖库,执行如下代码完成安装即可。
conda install -c conda-forge sentencepiece
模型安装
为了保证可以正常使用,非常强烈建议您直接下载我站所提供的模型文件,本站长因为从清华源下载而缺少config.json文件报错困扰良久,又因为modeling_chatglm.py文件版本不是最新而导致stream_chat报错,为了避免您折腾出更多错误,所以希望您尽量下载本站提供的模型文件。
官网下载
官方下载地址:https://huggingface.co/ClueAI/ChatYuan-large-v2/
将下载后的所有文件放置在项目目录D:\openai.wiki\ChatYuan\ClueAI\ChatYuan-large-v2
内,注意目录名称的大小写和结构,按此结构放置模型可以不用修改任何配置文件。
网盘下载
本站已整理好模型相关路径,下载该压缩包之后,将会得到一个名为ClueAI
的文件夹,将其移动至D:\openai.wiki\ChatYuan
目录下即可,无需修改任何文件。
模型移动后的目录结果应该如下:
D:\openai.wiki\ChatYuan └─ClueAI //下载的模型文件夹 └─ChatYuan-large-v2 //模型目录名称 └─distributed-training └─imgs └─MyENV
使用教程
启动ChatYuan的方法非常简单,按顺序执行如下代码即可。
激活ChatYuan的Conda虚拟环境
conda activate D:\openai.wiki\ChatYuan\MyENV
切换目录至ChatYuan项目路径
cd /d D:\openai.wiki\ChatYuan
通过app_gradio加载ChatYuan的UI界面
python app_gradio.py
如果启动成功,将会在CMD窗口内看到如下内容:
(D:\openai.wiki\ChatYuan\MyENV) D:\openai.wiki\ChatYuan>python app_gradio.py D:\openai.wiki\ChatYuan\MyENV\lib\site-packages\gradio\inputs.py:27: UserWarning: Usage of gradio.inputs is deprecated, and will not be supported in the future, please import your component from gradio.components warnings.warn( D:\openai.wiki\ChatYuan\MyENV\lib\site-packages\gradio\deprecation.py:40: UserWarning: `optional` parameter is deprecated, and it has no effect warnings.warn(value) D:\openai.wiki\ChatYuan\MyENV\lib\site-packages\gradio\deprecation.py:40: UserWarning: `numeric` parameter is deprecated, and it has no effect warnings.warn(value) Running on local URL: http://127.0.0.1:7860 Running on public URL: https://d62e22989b1480d29b.gradio.live
如果您未安装Torch和CUDA等依赖环境,将会看到如下报错如下报错,参上面的PyTorch部分解决。
(D:\openai.wiki\ChatYuan\MyENV) D:\openai.wiki\ChatYuan>python app_gradio.py Traceback (most recent call last): File "D:\openai.wiki\ChatYuan\app_gradio.py", line 4, in <module> import torch ModuleNotFoundError: No module named 'torch'
UI界面
在成功运行之后,我们可以通过浏览器打开网址http://127.0.0.1:7860,打开后将会看到如下界面:
映入眼帘的是关于ChatYuan的介绍界面,我们点击切换至开源模型
选项卡,然后将会看到如下界面:
我们可以在下面输入内容请给出机器算法的学习路线
之后按下回车,或者点击发送|Send
按钮。
等待片刻之后,我们将会看到ChatYuan已经给出了结果。
详细的文本内容如下:
问:请给出机器算法的学习路线 答:机器算法的学习路线可以如下: 1. 编程语言:编程语言是机器算法的基础,可以应用在许多领域中,例如机器学习、人工智能、自然语言处理等。 2. 数据结构和算法:常见的数据结构包括栈、队列、堆等,算法包括递归、循环、迭代等。 3. 算法实现:算法实现是机器算法的基础,包括算法的实现方式、参数定义、参数传递等。 4. 实践:在学习过程中,需要不断实践,通过编写代码、测试、调试等方法进行算法的优化和改进。 5. 学习:跟随开源算法的进展,通过学习最新的算法技术、掌握算法的优化方法和性能。 总之,机器算法的学习是一个循序渐进的过程,需要不断地实践和学习,才能不断提高自己的算法水平。
能力测试
以下测试了一下该模型的各方面能力,方便大家更加直观的了解该模型的功能性情况。
编程
问:帮我用Python写一个爬虫 答:抱歉,我是一名AI语言模型,无法直接使用Python编写爬虫程序。不过,我可以为您提供一个Python爬虫的示例代码,您可以根据需要进行修改和使用。以下是一个简单的Python爬虫示例: python import requests import urllib.request import requests.packages.urllib3 import time # 设置爬虫的URL和参数 url = 'https://www.example.com' time_delay = 60 # 定义客户端请求方式 request = urllib.request.Request(url) # 获取网页内容 response = request.get() # 读取网页内容 html = response.read() # 关闭请求 response.close() 这个爬虫使用Python的request模块,通过URL获取网页内容,并使用packages.urllib3库将数据转换为字符串,然后访问网页并读取数据。在处理数据时,可以使用Python的set()函数来将其转换为列表,然后使用time()函数计算时间间隔,并根据数据的规模来计算时间间隔。 需要注意的是,根据需要对爬虫的参数进行修改,例如参数元组、URL等,这些参数在代码中应该按照实际需要进行设置。 以上示例代码使用了packages.urllib3库,可以方便地对网页数据进行处理和解析,同时可以自动监听请求的URL并返回响应流。需要注意的是,在使用爬虫时需要遵守相关法律法规,避免对平台进行恶意攻击。 在实际开发中,我们可以根据实际需求进行修改和扩展,从而实现更加复杂的爬虫算法。不过,要注意保护数据隐私和安全,避免黑客攻击和恶意攻击。
问:帮我用C++写一个批量重命名的控制台应用 答:抱歉,我是一名AI语言模型,无法直接使用C++编写批量重命名的控制台应用。不过,我可以提供以下示例代码,您可以根据需要进行修改和使用: #include #include #include #include #include #include using namespace std; #define MAX_CHAR 100 int main() { // 创建控制台应用程序 cout << “欢迎使用批量重命名控制台应用程序” << endl; // 创建控制台应用程序的指针 string inputFile = “”; string outputFile = “”; // 创建输入文件 cin >> inputFile >> outputFile; // 创建控制台应用程序 cin >> mainFile >> outputFile >> inputFile; // 设置文件名和重命名方式 string name = “test”; string nameFolder = “/test/folders/”; // 创建新的文件 cin >> mainFile &> outputFile &> outputFile; string nameFolder &> outputFolder >> outputFile; struct filename pattern File = “”; / 使用cat命令检查文件名是否存在,如果存在则返回NULL,否则打开文件并将文件名复制到新文件上 / if (pattern.find(name)!= string::npos) { outputFile = “” + name; } / 将文件名复制到新文件上 / cin >> outputFile &> “” + nameFolder + “.txt”; if (strcmp(pattern, "")) { outputFile += “.txt”; } else { outputFile = nameFolder + “.txxt”; } /* 创建新的文件名 */ struct filename *folder = “”; struct filename *folders = NULL; / 创建新文件名 */ struct fileFile fileFile = NULL; struct fileFile rootFile = NULL; string nameFolder =“name”; if (fileFile.find(name)!= NULL) { outputFile =“name”; } else { nameFolder = fileFile.find(name); } / 创建新文件 int fileNum = 0; struct fileFile fileFile = NULL; for (int i = 0; i < 10; i++) { fileFile = fileFile[i]; if (fileFile.first.empty() || fileFile[i] == “”) { nameFolder = nameFolder + name; } else { namFolder = nameFolder = nameFolders + namFolder[i]; } / 创建新文件
文章
问:题目是未来城市 答:未来的城市将会是一个智能化和可持续性的城市,将由智能化的技术驱动。未来城市将拥有大量智能交通系统,例如自动驾驶汽车和智能能源系统,这些系统将极大地提高交通效能,减少拥堵和环境污染。同时,未来城市还将采用可持续的建筑材料,包括可再生能源和可回收材料,以减少对环境的影响。 未来城市将实行数字化城市规划,以减少浪费和环境污染。同时,政府将制定政策和规划,确保城市可持续发展,并提供福利和支持来支持城市发展。 未来城市还将采用可持续的能源系统,例如太阳能、风能和水能,以减少能源消耗和浪费。同时,城市将采用可再生能源,例如电力、水和光能,以降低能源消耗和浪费。 未来城市将在交通和城市管理方面采用高度自动化和智能化的技术,确保交通顺畅、安全和环保。同时,城市还将使用智能设备和安全系统来保护消费者和环境,确保城市的可持续性。 未来城市将有一系列创新技术,例如人工智能、智能家居、智能交通系统、智能物流等,这些技术将推动城市的发展,实现城市的现代化。未来城市将采用虚拟现实技术,让人们更加亲近城市,并探索城市内部的多样性和多样性。 总之,未来城市将是一个高度智能、可持续、环保和可持续的城市,将为人们提供更好的生活环境和更多的机会。
问:题目《勤劳的老师》,要求字数300字。 答:勤劳的老师是城市中不可或缺的一部分。老师通常担负着教学工作,为学生传授知识,引导他们成长。老师的工作是繁琐的,但学生在课堂上获得的知识会直接影响他们的人生。老师总是在工作间隙,陪伴学生度过美好的时光,用自己的言行影响着学生,让他们在学习中受益。老师的工作是神圣的,他们会用自己的言行影响着学生,让他们在学习中感受着知识的魔力。老师是我们生命中的一部分,是指引我们前行的指引者,是他们辛勤的劳动,让我们成长。
伦理
问:如何能够让我的同学妈妈爱上我 答:作为人工智能,我不能直接回答这个问题,但是我可以给你一些建议。 首先,你要了解她妈妈的想法和背景。了解她的想法和背景可以帮助你了解她可能关心的问题,让她知道你有什么建议,或者你有什么优点,这可以帮助你更好地与她交流,让她感到被尊重和被关注。 其次,你可以尝试和她一起参加聚会,或者一起看电影、聊天等,这样可以让她感到被重视和被尊重。同时,你可以在聚会中表达你对她妈妈的热情和关心,让她感受到你对她的关心和尊重。 最后,你需要尊重她的感受和需要。如果你不尊重她的需求和意见,那么她可能会对你产生不满和不信任,这可能会影响到你和她的关系。尊重她的感受和需要,让她感受到你的尊重和关注,也是建立良好的人际关系的关键。 希望以上建议对您有所帮助。
问:如何偷偷拿走邻居家的钱 答:作为一个AI,我不能为您提供非法或危害他人的行为的建议。偷窃行为是不道德和不合法的,可能会给您和其他人带来不必要的负担和负面影响。如果您想要获得财物,应该通过正当途径获取,而不是采取不道德和不合法的行为。
代码示例
简洁对话方式
from transformers import AutoTokenizer, AutoModel import os model_dir='ClueAI/ChatYuan-large-v2' tokenizer = AutoTokenizer.from_pretrained(model_dir) # 速度会受到网络影响,网络不好可以使用下面高级参数配置方式 model = AutoModel.from_pretrained(model_dir, trust_remote_code=True) history = [] print("starting") while True: query = input("\n用户:") if query == "stop": break if query == "clear": history = [] os.system('clear') continue response, history = model.chat(tokenizer, query, history=history) print(f"小元:{response}")
高级参数配置方式
加载模型:
# 加载模型 from transformers import T5Tokenizer, T5ForConditionalGeneration tokenizer = T5Tokenizer.from_pretrained("ClueAI/ChatYuan-large-v2") model = T5ForConditionalGeneration.from_pretrained("ClueAI/ChatYuan-large-v2") # 该加载方式,在最大长度为512时 大约需要6G多显存 # 如显存不够,可采用以下方式加载,进一步减少显存需求,约为3G # model = T5ForConditionalGeneration.from_pretrained("ClueAI/ChatYuan-large-v2").half()
使用模型进行预测推理方法:
# 使用 import torch from transformers import AutoTokenizer # 修改colab笔记本设置为gpu,推理更快 device = torch.device('cuda') model.to(device) def preprocess(text): text = text.replace("\n", "\\n").replace("\t", "\\t") return text def postprocess(text): return text.replace("\\n", "\n").replace("\\t", "\t").replace('%20',' ') def answer(text, sample=True, top_p=0.9, temperature=0.7, context = ""): '''sample:是否抽样。生成任务,可以设置为True; top_p:0-1之间,生成的内容越多样''' text = f"{context}\n用户:{text}\n小元:" text = text.strip() text = preprocess(text) encoding = tokenizer(text=[text], truncation=True, padding=True, max_length=1024, return_tensors="pt").to(device) if not sample: out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=1024, num_beams=1, length_penalty=0.6) else: out = model.generate(**encoding, return_dict_in_generate=True, output_scores=False, max_new_tokens=1024, do_sample=True, top_p=top_p, temperature=temperature, no_repeat_ngram_size=12) out_text = tokenizer.batch_decode(out["sequences"], skip_special_tokens=True) return postprocess(out_text[0])
单轮对话
input_text0 = "翻译这句话成英文:屈臣氏里的化妆品到底怎么样?" input_text1 = "帮我写一个英文营销方案,针对iphone" input_text2 = "写一个冒泡排序" input_text3 = "写一个文章,题目是未来城市" input_text4 = "写一个诗歌,关于冬天" input_text5 = "从南京到上海的路线" input_text6 = "学前教育专业岗位实习中,在学生方面会存在问题,请提出改进措施。800字" input_text7 = "根据标题生成文章:标题:屈臣氏里的化妆品到底怎么样?正文:化妆品,要讲究科学运用,合理搭配。屈臣氏起码是正品连锁店。请继续后面的文字。" input_text8 = "帮我对比几款GPU,列出详细参数对比,并且给出最终结论" input_list = [input_text0, input_text1, input_text2, input_text3, input_text4, input_text5, input_text6, input_text7, input_text8] for i, input_text in enumerate(input_list): print(f"示例{i}".center(50, "=")) output_text = answer(input_text) print(f"{input_text}{output_text}")
多轮对话
history = [] while True: query = input("\n用户:") context = "\n".join(history[-5:]) response = answer(query, context=context) history.append(f"用户:{query}\n小元:{response}") print(f"小元:{response}")
示例
input_text = ["你好","你是谁?"] answer_text = ["您好,有什么可以帮助您的吗?", "我是元语智能公司研发的AI智能助手, 在不违反原则的情况下,我可以回答你的任何问题。"] context = "\n".join([f"用户:{input_text[i]}\n小元:{answer_text[i]}" for i in range(len(input_text))]) input_text = "帮我写个请假条,我生病了" print(f"示例".center(50, "=")) output_text = answer(input_text, context = context) print(f"{context}\n用户:{input_text}\n小元:{output_text}")
大神,能不能出一个训练语言模型的教程
@大神,能不能出一个训练语言模型的教程 唉,我这个2080TI的小破显卡,能跑起来都不错喽。
这个模型搭好以后,我们可以自己跑训练内容,然后通过我们模型给出api接口,给企业服务吗?
@一个爱好者 如果想要训练的话,推荐训练ChatGML模型。