【中信建投 金融工程】如何部署本地版“ChatGPT”提高研究效率

admin1年前研报702

重要提示:通过本订阅号发布的观点和信息仅供中信建投证券股份有限公司(下称“中信建投”)客户中符合《证券期货投资者适当性管理办法》规定的机构类专业投资者参考。因本订阅号暂时无法设置访问限制,若您并非中信建投客户中的机构类专业投资者,为控制投资风险,请您请取消关注,请勿订阅、接收或使用本订阅号中的任何信息。对由此给您造成的不便表示诚挚歉意,感谢您的理解与配合!

核心观点

基于网页交互模式的ChatGPT对于人类的生活以及工作方式带来的极大的便利,然而这只是ChatGPT的冰山一角。API以及插件系统的开放,使得ChatGPT能够结合各种程序以及软件,让ChatGPT的应用空间充满无尽的可能性,这是真正意义上AI的iphone时刻。

对于金融工程研究而言,除了日常的网页版交互完成一定的指令之外,通过API接口能够使研究工作效率极大提高。同时,随着各类技术的应用,本地化部署开源大语言模型框架也得以实现。

本文将介绍如何使用OPENAI的API接口以及如何本地部署开源大语言模型Vicuna,能够在程序中调用各类模型,提高研究工作效率


主要结论

简介

基于网页交互模式的ChatGPT对于人类的生活以及工作方式带来的极大的便利,然而这只是ChatGPT的冰山一角。API以及插件系统的开放,使得ChatGPT能够结合各种程序以及软件,让ChatGPT的应用空间充满无尽的可能性,这是真正意义上AI的iphone时刻。

对于金融工程研究而言,除了日常的网页版交互完成一定的指令之外,通过API接口能够使研究工作效率极大提高。同时,随着各类技术的应用,本地化部署开源大语言模型框架也得以实现。

官方API接口

OPENAI官方开放了API接口,可以使用HTTP请求,也可以使用OPENAI提供的python库,Node.js库以及一些社区维护的库。我们以python库为例,介绍如何使用OPENAI的API接口。

本地部署VICUNA

本文以Vicuna模型为例,介绍如何在个人电脑上部署模型。Vicuna模型是基于LLaMA的微调模型,是由加州大学伯克利分校、CMU、斯坦福大学和加州大学圣地亚哥分校的成员共同提出的。他们从shareGPT收集了大约 7 万个对话,借鉴Alpaca的微调方式,将LLaMA模型进行微调。最终实现了chatGPT大约90%的质量,但是训练成本仅300美元左右

一、简介

ChatGPT是OpenAI开发的人工智能聊天机器人程序,于2022年11月推出。该程序使用基于GPT-3.5、GPT-4架构的大型语言模型並以强化学习训练。ChatGPT目前仍以文字方式互动,而除了可以用人类自然对话方式来互动,还可以用于甚为复杂的语言工作,包括自动生成文本、自动问答、自动摘要等多种任务。如:在自动文本生成方面,ChatGPT可以根据输入的文本自动生成类似的文本(剧本、歌曲、企划等),在自动问答方面,ChatGPT可以根据输入的问题自动生成答案。还有编写和调试计算机程序的能力。

ChatGPT的出现对自然语言处理技术的推进,进一步促进了人工智能和自然语言处理等领域的快速发展,有着重要的意义。ChatGPT将改变我们的工作方式和人类的生活,并且将带来更多的机会和挑战。

(以上文字均由ChatGPT生成)

基于网页交互模式的ChatGPT对于人类的生活以及工作方式带来的极大的便利,然而这只是ChatGPT的冰山一角。API以及插件系统的开放,使得ChatGPT能够结合各种程序以及软件,让ChatGPT的应用空间充满无尽的可能性,这是真正意义上AI的IPHONE时刻。

对于金融工程研究而言,除了日常的网页版交互完成一定的指令之外,通过API接口能够使研究工作效率极大提高。同时,随着各类技术的应用,本地化部署开源大语言模型框架也得以实现。

本文将介绍如何使用OPENAI的API接口以及如何本地部署开源大语言模型Vicuna,能够在程序中调用各类模型,提高研究工作效率


二、官方API接口

OPENAI官方开放了API接口,可以使用HTTP请求,也可以使用OPENAI提供的python库,Node.js库以及一些社区维护的库。我们以python库为例,介绍如何使用OPENAI的API接口。


2.1 准备工作

为了使用OPENAI的接口,需要在官网注册账号,注册成功后,每个账号会提供5美元(3月3日之前注册的账号为18美元)的额度用于体验资格。

注册成功后,在API页面创建新的安全密钥,会生成sk-**********的字符串,保存密钥用于后续操作。


2.2 请求

首先安装官方的python库:

pip install openai

安装完成后便可调用接口,以查询模型为例,通过一下代码即可实现利用python API接口从官方查询模型列表:

import os
import openai

openai.api_key = "<YOUR-API-KEY-HERE>"

models = openai.Model.list()

for imodel in models['data']:
    print(imodel['root'])

其中api_key为刚才保存的sk开头的密钥,目前OPENAI提供了丰富的模型,主要有Ada,Babbage,Curie,Davinci 以及最新的GPT-3.5-turbo等模型机器相关模型共计60个。其中Ada,Babbage,Curie以及Davinci均为GPT-3模型,模型参数量分别为350M,1.3B,6.7B以及175B。GPT-3.5-turbo是目前官方推荐的GPT-3.5模型,能够以较低的成本(对话成本为text-davinci-003的1/10)实现优异的表现。

目前GPT-4的模型还未公开开放,可以通过加入waitinglist等待或者付费使用。


2.3 任务类型

OPENAI API接口的任务类型包括补全(completions),对话(chat),编辑(edit),图片(images),嵌入向量(embedding),音频(audio),文件(files),微调(fine-tunes)以及适度性(moderations)。

以对话为例,使用API调用对话的接口方式为:

completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": "Hello!"}
  ]
)
print(completion.choices[0].message)

输出结果为:

{
  "content": "Hello there! How may I assist you today?",
  "role": "assistant"
}

以图片任务为例,OPENAI使用第二代 DALL·E模型生成图片,生成的案例如下:

response = openai.Image.create(
  prompt="a white siamese cat",
  n=1,
  size="1024x1024"
)
image_url = response['data'][0]['url']

生成的图片结果:


API同样提供语音模型whisper的接口,能够用于语音转文字,语音翻译等任务。以下代码为语音转文字的实例:

audio_file = open("chatgpt.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
print(transcript['text'])

代码输出结果:

ChatGPT是OpenAI开发的一款人工智能聊天机器人 它可以以类似人类的方式进行对话交流 它基于GPT四语言模型 拥有1750亿个参数 能够在一秒钟内处理数十亿个单词 ChatGPT的出现对于世界的影响有以下几个方面 ChatGPT可以提高人们的生产力和创造力 帮助他们完成各种文本生成 编辑翻译摘要等任务 它也可以作为一个智能助理 为用户提供信息建议娱乐等服务 ChatGPT可以促进人工智能的发展和普及 让更多的人接触和使用先进的语言模型技术 它也可以为其他领域的研究和应用提供灵感和支持 例如教育医疗法律商业等 ChatGPT也可能带来一些挑战和风险 例如如何保证它的安全性、可靠性、道德性和责任性 它也可能对人类的语言、思维、沟通和社会等方面 产生一些影响和改变

其他任务类型包括文本补全,模型微调,词嵌入以及适度性检查,均有API接口实现,具体实现可查询官方文档。


2.4 辅助工作

对于金融工程研究而言,利用OPENAI提供的模型的强大的代码分析及生成能力,可以极大的提高日常研究的效率。


2.4.1 代码分析

可以将代码文件内容输入文本的API接口,利用分析的prompt来分析代码内容。给定一个logfile.py文件,包含了一个Log class:

import os
import uuid
import json

class Log:
    def __init__(self, path):
        dirname = os.path.dirname(path)
        os.makedirs(dirname, exist_ok=True)
        f = open(path, "a+")

        # Check that the file is newline-terminated
        size = os.path.getsize(path)
        if size > 0:
            f.seek(size - 1)
            end = f.read(1)
            if end != "\n":
                f.write("\n")
        self.f = f
        self.path = path

    def log(self, event):
        event["_event_id"] = str(uuid.uuid4())
        json.dump(event, self.f)
        self.f.write("\n")

    def state(self):
        state = {"complete": set(), "last": None}
        for line in open(self.path):
            event = json.loads(line)
            if event["type"] == "submit" and event["success"]:
                state["complete"].add(event["id"])
                state["last"] = event
        return state

为了分析以上代码内容,可以利用以下代码实现代码分析功能:

file = 'logfile.py'
f = open(file, 'r')
contexts = ' '.join(f.readlines())
prompt = '\n 解释以上代码内容\n'
response = openai.Completion.create(
  model="text-davinci-003",
  prompt=contexts + prompt,
  temperature=0,
  max_tokens=1000,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=["\"\"\""]
)
print(response['choices'][0]['text'])

输出结果为:

这段代码实现了一个Log类,它可以用来记录事件,并获取事件的状态。
 __init__方法用于初始化Log类,它接收一个路径参数,用于指定日志文件的位置。它会检查路径是否存在,如果不存在,就会创建相应的文件夹。然后,它会打开文件,并检查文件是否以换行符结尾,如果不是,就会添加换行符。
 log方法用于记录事件,它接收一个事件参数,并为事件生成一个唯一的ID,然后将事件写入日志文件。
state方法用于获取事件的状态,它会读取日志文件,并返回一个字典,其中包含已完成的事件ID和最后一个成功完成的事件。


2.4.2 代码生成

利用合适的prompt可以通过API来实现代码生成。以上述文件为例,要求ChatGPT在其中加入一个输出的函数,完善Log函数的功能:

file = 'logfile.py'
f = open(file, 'r')
contexts = ' '.join(f.readlines())
prompt = '\n 在以上class中加入一个输出的函数,输出Log文件的信息, 请输出完整的Log class\n'
response = openai.Completion.create(
  model="text-davinci-003",
  prompt=contexts + prompt,
  temperature=0,
  max_tokens=1000,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=["\"\"\""]
)
print(response['choices'][0]['text'])

输出结果为:

class Log:
    def __init__(self, path):
        dirname = os.path.dirname(path)
        os.makedirs(dirname, exist_ok=True)
        f = open(path, "a+")
        # Check that the file is newline-terminated
        size = os.path.getsize(path)
        if size > 0:
            f.seek(size - 1)
            end = f.read(1)
            if end != "\n":
                f.write("\n")
        self.f = f
        self.path = path
    def log(self, event):
        event["_event_id"] = str(uuid.uuid4())
        json.dump(event, self.f)
        self.f.write("\n")
    def state(self):
        state = {"complete": set(), "last": None}
        for line in open(self.path):
            event = json.loads(line)
            if event["type"] == "submit" and event["success"]:
                state["complete"].add(event["id"])
                state["last"] = event
        return state
    def output(self):
        with open(self.path, 'r') as f:
            for line in f:
                print(line)


2.4.3 代码说明文档

同样API可以用于代码的文档生成:

file = 'logfile.py'
f = open(file, 'r')
contexts = ' '.join(f.readlines())
prompt = '\n write an elaborate, high quality docstring for the above function: \n"\"\" '
response = openai.Completion.create(
  model="text-davinci-003",
  prompt=contexts + prompt,
  temperature=0,
  max_tokens=300,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=["\"\"\""]
)
print(response['choices'][0]['text'])

输出结果

This class provides a logging utility for tracking events. It is initialized with a path to a log file, which is created if it does not exist. The log() method is used to write an event to the log file, and the state() method is used to retrieve the current state of the log file.
Parameters
----------
path : str
    The path to the log file.
Attributes
----------
f : file
    The file object for the log file.
path : str
    The path to the log file.
Methods
-------
log(event)
    Log an event to the log file.
state()
    Retrieve the current state of the log file.


2.4.4 代码debug

代码bug是日常代码编写中最为头疼的问题,利用ChatGPT可以非常高效的进行代码debug。以logfile为例,在代码中加入bug,将第五行的 == 改为 =,代码运行时将会报错

利用ChatGPT进行debug:

file = 'logfile.py'
f = open(file, 'r')
contexts = ' '.join(f.readlines())
prompt = '\n Fix above function: \n"\"\" '
response = openai.Completion.create(
  model="text-davinci-003",
  prompt=contexts + prompt,
  temperature=0,
  max_tokens=300,
  top_p=1.0,
  frequency_penalty=0.0,
  presence_penalty=0.0,
  stop=["\"\"\""]
)
print(response['choices'][0]['text'])

输出结果:

def state(self):
    state = {"complete": set(), "last": None}
    for line in open(self.path):
        event = json.loads(line)
        if event["type"] == "submit" and event["success"]:
            state["complete"].add(event["id"])
            state["last"] = event
    return state

可以看出ChatGPT正确的修复了代码bug。


2.4.5 录音生成会议纪要

行业研究员需要花费大量的时间精力撰写会议纪要,人工生成会议纪要通常分为语音转文字,以及从文字提取关键信息这两步骤,通过OPENAI的API接口,能够高效的实现会议纪要生成,以下为利用录音生成纪要的实例:

audio_file = open("chatgpt.mp3", "rb")
transcript = openai.Audio.transcribe("whisper-1", audio_file)
completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "user", "content": transcript['text'] + "\n 请精简以上内容"}
  ]
)
print(completion.choices[0].message['content'])

输出结果为:

ChatGPTOpenAI开发的一款人工智能聊天机器人,能够以类似人类的方式进行对话交流。它基于GPT四语言模型,拥有1750亿个参数,可以提高人们的生产力和创造力,促进人工智能的发展和普及,并为其他领域的研究和应用提供灵感和支持。然而,ChatGPT也可能带来一些挑战和风险,需要考虑安全性、可靠性、道德性和责任性,并可能对人类的语言、思维、沟通和社会等方面产生一些影响和改变。

音频文件原文共307个文字,提取摘要后的文字字数为169。在未改变原文含义的情况下,成功的进行了信息的压缩。

三、本地部署Vicuna

OPENAI虽然提供了强大的API支持,能够极大的拓展ChatGPT以及其他模型的应用领域,但是大部分模型均未开源,而且在使用时存在诸多限制。除了OPENAI的ChatGPT之外,各大互联网企业也纷纷推出了自己的大预言模型,例如百度的文心一言,阿里的通义千问,商汤的商量等,与OPENAI的战略一致,这些模型也均未开源。

除此之外,meta开源了LLaMA模型,清华开源了GLM模型,使得一般企业和个人能够部署和训练自己的“ChatGPT”。

但是大语言模型对于硬件要求极高,限制了个人用户部署自己的“ChatGPT”,随着一系列优化技术的提出,例如ZeRO、Gemini、LoRA、AutoChunk等,使得训练和部署模型的成本极大下降。

各个优化模型也纷纷提出,包括Colossal-AI,Alpaca, Vicuna等,能够以较低的成本训练或者部署对话模型。使得在个人电脑上部署成为可能。

本文以Vicuna模型为例,介绍如何在个人电脑上部署模型。Vicuna模型是基于LLaMA的微调模型,是由加州大学伯克利分校、CMU、斯坦福大学和加州大学圣地亚哥分校的成员共同提出的。他们从ShareGPT收集了大约 7 万个对话,借鉴Alpaca的微调方式,将LLaMA模型进行微调。最终实现了ChatGPT大约90%的质量,但是训练成本仅300美元左右。

需要注意的是,Vicuna同LLaMA一样,模型均不能用于商业用途。本文也仅为Vicuna的模型介绍,不提供任商业支持。


3.1 准备工作

系统要求:Linux或者Window WSL

硬件要求:CPU模式(7B:30GB内存, 13B:60G内存)

                GPU模式(7B:14G显存, 13B:28G显存, 可使用8bit量化模型压缩显存)


首先安装fastchat以及huggingface的transoformer:

# Install FastChat

pip3 install fschat

# Install the latest main branch of huggingface/transformers

pip3 install git+https://github.com/huggingface/transformers


克隆fastchat的项目地址:

git clone https://github.com/lm-sys/FastChat.git


其次下载LLaMA权重文件以及Vicuna delta权重文件。

原始的LLaMA权重文件需要提交申请,申请通过之后即可下载,申请地址为申请链接。有许多社区开源版本,可自行搜索下载。下载完成后,需要将权重文件转换为huggingface格式的权重文件。也可从huggingface的decapoda-research/llama-13b-hf项目直接下载转换后的权重文件。

Vicuna delta权重文件可从huggingface的lmsys/vicuna-13b-delta-v1.1项目下载。


将两个权重文件融合,融合命令为:

python3 -m fastchat.model.apply_delta \

--base /path/to/llama-13b \

--target /output/path/to/vicuna-13b \

--delta lmsys/vicuna-13b-delta-v1.1


融合完成后会得到以下文件:

4.0K config.json

4.0K generation_config.json

9.3G pytorch_model-00001-of-00003.bin

9.3G pytorch_model-00002-of-00003.bin

6.1G pytorch_model-00003-of-00003.bin

36K pytorch_model.bin.index.json

4.0K special_tokens_map.json

492K tokenizer.model

4.0K tokenizer_config.json


3.2 模型运行

在本地运行以下命令加载模型:

单GPU模式:python3 -m fastchat.serve.cli --model-path /path/to/vicuna/weights

单CPU模式:python3 -m fastchat.serve.cli --model-path /path/to/vicuna/weights --device cpu

多GPU模式:python3 -m fastchat.serve.cli --model-path /path/to/vicuna/weights --num-gpus 2
8bit模式:python3 -m fastchat.serve.cli --model-path /path/to/vicuna/weights --load-8bit

可根据自己硬件条件运行相应的命令。推荐使用8bit的GPU模型。加载完成后便可进入问答系统,我们分别使用ChatGPT以及Vicuna进行对比,测试两者的区别


问题一:金融工程未来的发展方向

1:金融工程未来的发展方向

ChatGPT

Vicuna

金融工程是指将工程学和数学应用于金融领域,以帮助金融机构和投资者更好地管理风险和提高收益。随着金融市场的不断变化和创新,金融工程的发展方向主要包括以下几个方面:

 

人工智能和大数据:人工智能和大数据技术的发展使得金融机构可以更好地分析市场和风险,优化交易策略和资产配置。通过机器学习、深度学习等技术,可以更好地发现市场中的价值机会和风险点,进而提高投资回报和降低风险。

 

量化投资和算法交易:量化投资和算法交易是利用数学和统计学模型来分析市场和投资组合的交易方式。随着技术的不断发展,量化投资和算法交易可以更好地识别市场机会和风险点,从而实现更好的投资回报和风险管理。

 

区块链技术:区块链技术的发展为金融工程提供了新的机遇。区块链可以提供去中心化的交易平台,使得交易更加透明、安全和高效。此外,区块链技术还可以用于智能合约的开发,帮助金融机构更好地管理合约风险。

 

金融创新和新兴市场:金融创新和新兴市场的发展为金融工程提供了新的挑战和机遇。例如,随着互联网金融的发展,金融机构需要更好地利用技术和数据分析来发现新的市场机会和风险点。

 

总之,随着科技和金融市场的不断变化和创新,金融工程的未来发展前景仍然广阔。

金融工程未来的发展方向可能包括:

 

1. 区块链技术:区块链技术是一种去中心化、不可篡改的数据储存技术。未来的区块链技术可能会不断发展,例如更高的吞吐

量、更高的安全性、更多的应用场景等。在金融领域,区块链技术可以用于信息安全、资金管理、风险控制等方面。

2. 人工智能技术:人工智能技术可以用于金融领域的风险管理、客户服务、营销等方面。未来的人工智能技术可能会不断发展

,例如更高的智能程度、更多的应用场景等。

3. 量子计算技术:量子计算技术可以用于金融领域的数据分析和预测等方面。未来的量子计算技术可能会不断发展,例如更高

的计算速度、更广泛的应用场景等。

4. 区块链金融:区块链金融是一种基于区块链技术的金融服务,它可以提供更安全、更高效的金融服务。未来的区块链金融可

能会不断发展,例如更多的金融服务、更高的安全性等。

 

这些都是金融工程未来发展方向的一些潜在机会

资料来源:ChatGPT, Vicuna,中信建投证券

两者均从四个方面阐述了金融工程未来的发展方向,表现不分伯仲。


问题二,用Pyhon实现冒泡排序

2:Pyhon实现冒泡排序

ChatGPT

Vicuna

def bubble_sort(arr):

    n = len(arr)

    

    for i in range(n):

        for j in range(n-i-1):

            if arr[j] > arr[j+1]:

                # Swap elements

                arr[j], arr[j+1] = arr[j+1], arr[j]

    

    return arr

def bubble_sort(arr):

    n = len(arr)

    # arr进行循环排序

    for i in range(n):

        # 遍历arr的所有元素

        for j in range(n):

            # 比较arr[j]arr[i]的大小,如果arr[j]小于arr[i],则交换它们的位置

            if arr[j] < arr[i]:

                arr[j], arr[i] = arr[i], arr[j]

    return arr

资料来源:ChatGPT, Vicuna,中信建投证券

两者均实现了完整的冒泡算法,ChatGPT算法效率更高,Vicuna注释更加完整。


问题三,debug以下代码:

import Random
a = random.randint(1,12)
b = random.randint(1,12)
for i in range(10):
    question = "What is "+a+" x "+b+"? "
    answer = input(question)
    if answer = a*b
        print (Well done!)
    else:
        print("No.")

3:debug代码

ChatGPT

Vicuna

Here's the fixed Python code:

 

python

Copy code

import random

 

a = random.randint(1, 12)

b = random.randint(1, 12)

 

for i in range(10):

    question = "What is " + str(a) + " x " + str(b) + "? "

    answer = input(question)

    if int(answer) == a * b:

        print("Well done!")

    else:

        print("No.")

Here are the changes I made to fix the bugs:

 

The import statement was incorrect. random should be lowercase, so I changed Random to random.

In the line if answer = a*b, the = should be changed to == to perform a comparison instead of an assignment.

The variables a and b are integers, but when building the question string, they need to be converted to strings using str(a) and str(b) before concatenation.

In the if statement, we need to convert the user's input to an integer using int(answer) before comparing it to a * b.

With these changes, the code should run correctly.

Here is the fixed version of the function:

 

Python Code

===========

 

import Random

 

a = random.randint(1, 12)

b = random.randint(1, 12)

 

for i in range(10):

question = "What is " + str(a) + " x " + str(b) + "?"

answer = input(question)

```python

if answer == str(a * b):

    print("Well done!")

else:

    print("No.")

```

Explanation:

 

The main issues with the original code were:

 

1. The `if` statement was missing an `==` operator.

2. The `input` function was not converting the user's answer to a string.

3. The `print` statement was not using the correct syntax for printing messages to the user.

 

The fixed version of the code addresses these issues. The `if` statement now uses an `==` operator to compare the answer to the result of `a * b`. The `input` function is now used to get the user's answer as a string, and the `print` statement uses the correct syntax for printing messages to the user.

资料来源:ChatGPT, Vicuna,中信建投证券

原代码中共有四个bug,ChatGPT均成功修复,而Vicuna只修复了其中的三个,并未修复import Random这个bug,并且,代码最后几行的缩进没有正确处理,引入了新的bug。


问题四:有一群鸭和兔子,共有10个脑袋,32条腿,请问鸭和免各有几只?

4:鸡兔同笼

Chatgpt

Vicuna

假设鸭子的数量为 $x$,兔子的数量为 $y$,那么由题意可得:

 

$x + y = 10$ (总数量为 10

 

$2x + 4y = 32$ (总腿数为 32,鸭子有 2 条腿,兔子有 4 条腿)

 

将第一个方程式变形得到 $y = 10 - x$,然后将它代入第二个方程式中:

 

$2x + 4(10 - x) = 32$

 

化简得到 $2x + 40 - 4x = 32$,解得 $x = 6$,代入 $y = 10 - x$ 可得 $y = 4$

 

因此,这群动物中有 6 只鸭子和 4 只兔子。

假设这群鸭和兔子共有 $x$ 只鸭和 $y$ 只兔子,则由于它们共有 10 个脑袋和 32 条腿,那么有:

 

$$\begin{aligned}x+y &= 10 \ (&\text{鸭和兔子共有 10 个脑袋}) \

x+2y &= 32 \ (&\text{鸭和兔子共有 32 条腿}) \

\end{aligned}$$

 

我们可以将第一个方程式乘以 2 并取倒,得到:

 

$$x+2y = 2(x+y) \iff 3x+2y=2x+2y \iff x=y$$

 

这个方程表示 $x$ $y$ 的值相等。因此,鸭和兔子共有 $x=y$ 只。

资料来源:ChatGPT, Vicuna,中信建投证券

两者均未给出正确答案,其中ChatGPT搞反了顺序,相较而言,Vicuna的错误更加离谱,只给出了x=y这个错误结论。

通过以上对比可以看出,对于普通的对话,Vicuna的表现接近ChatGPT水平,而在推理方面,Vicuna与ChatGPT存在一定的差距,这也是由模型本身的大小所导致的。

3.3 模型微调

Vicuna本身是基于LLaMA的微调后的模型,对于各类下游任务,可以使用相应的数据对Vicuna进行微调,微调对硬件要求较高,微调命令为:


torchrun --nproc_per_node=4 --master_port=20001 fastchat/train/train_mem.py \

--model_name_or_path ~/model_weights/llama-7b  \

--data_path playground/data/dummy.json \

--bf16 True \

--output_dir output \

--num_train_epochs 3 \

--per_device_train_batch_size 2 \

--per_device_eval_batch_size 2 \

--gradient_accumulation_steps 16 \

--evaluation_strategy "no" \

--save_strategy "steps" \

--save_steps 1200 \

--save_total_limit 10 \

--learning_rate 2e-5 \

--weight_decay 0. \

--warmup_ratio 0.03 \

--lr_scheduler_type "cosine" \

--logging_steps 1 \

--fsdp "full_shard auto_wrap" \

--fsdp_transformer_layer_cls_to_wrap 'LlamaDecoderLayer' \

--tf32 True \

--model_max_length 2048 \

--gradient_checkpointing True \

--lazy_preprocess True

四、总结

ChatGPT的出现真正意义上的打开了人工智能的大门,对话生成已经展现出惊人的能力,而这只是AGI的冰山一角,API以及插件的开放,使得ChatGPT充满了无限的遐想。正如黄仁勋所说,我们正处于 AI 的‘ iPhone 时刻。

随着模型的不断迭代以及优化技术的不断改进,使得我们能够更加高效的使用ChatGPT以及其他相关模型,提高研究工作效率。




风险分析

所有结果均来自模型输出,模型训练的材料来自公开资料,模型输出的结果可能存在以下风险:误导性回答,数据隐私问题,缺乏道德标准,算法偏见等,使用模型结果时请仔细检查。模型的部署需要一定的环境配置,不保证在所有环境模型均能成功部署。模型运行对硬件条件有一定的要求,不保证在模型在所有硬件条件下均能部署。模型部署均有相应的版权要求,请务必参考相应模型的版权要求,合理使用开源模型。模型接口为付费使用,费用标准请参考公司官网,请合理使用接口。



证券研究报告名称:《如何部署本地版“ChatGPT”提高研究效率》 

对外发布时间:2023年4月17日

报告发布机构:中信建投证券股份有限公司 

本报告分析师:丁鲁明 执业证书编号:S1440515020001

王超 执业证书编号:S1440522120002

免责声明:

本公众订阅号(微信号:鲁明量化全视角)为丁鲁明金融工程研究团队(现供职于中信建投证券研究发展部)设立的,关于金融工程研究的唯一订阅号;团队负责人丁鲁明具备分析师证券投资咨询(分析师)执业资格,资格证书编号为:S1440515020001。

本公众订阅号所载内容仅面向专业机构投资者,任何不符合前述条件的订阅者,敬请订阅前自行评估接收订阅内容的适当性。订阅本公众订阅号不构成任何合同或承诺的基础,本公司不因任何订阅或接收本公众订阅号内容的行为而将订阅人视为本公司的客户。

本公众订阅号不是中信建投证券研究报告的发布平台,所载内容均来自于中信建投证券研究发展部已正式发布的研究报告或对报告进行的跟踪与解读,订阅者若使用所载资料,有可能会因缺乏对完整报告的了解而对其中关键假设、评级、目标价等内容产生误解。提请订阅者参阅本公司已发布的完整证券研究报告,仔细阅读其所附各项声明、信息披露事项及风险提示,关注相关的分析、预测能够成立的关键假设条件,关注投资评级和证券目标价格的预测时间周期,并准确理解投资评级的含义。

本公司对本帐号所载资料的准确性、可靠性、时效性及完整性不作任何明示或暗示的保证。本帐号资料、意见等仅代表来源证券研究报告发布当日的判断,相关研究观点可依据本公司后续发布的证券研究报告在不发布通知的情形下作出更改。本公司的销售人员、交易人员以及其他专业人士可能会依据不同假设和标准、采用不同的分析方法而口头或书面发表与本帐号资料意见不一致的市场评论和/或观点。

本帐号内容并非投资决策服务,在任何情形下都不构成对接收本帐号内容受众的任何投资建议。订阅者应当充分了解各类投资风险,根据自身情况自主做出投资决策并自行承担投资风险。订阅者根据本帐号内容做出的任何决策与本公司或相关作者无关。

本帐号内容仅为本公司所有。未经本公司许可,任何机构和/或个人不得以任何形式转发、翻版、复制和发布相关内容,且不得对其进行任何有悖原意的引用、删节和修改。除本公司书面许可外,一切转载行为均属侵权。版权所有,违者必究。



本篇文章来源于微信公众号: 鲁明量化全视角

本文链接:http://17quant.com/post/%E3%80%90%E4%B8%AD%E4%BF%A1%E5%BB%BA%E6%8A%95%20%E9%87%91%E8%9E%8D%E5%B7%A5%E7%A8%8B%E3%80%91%E5%A6%82%E4%BD%95%E9%83%A8%E7%BD%B2%E6%9C%AC%E5%9C%B0%E7%89%88%E2%80%9CChatGPT%E2%80%9D%E6%8F%90%E9%AB%98%E7%A0%94%E7%A9%B6%E6%95%88%E7%8E%87.html 转载需授权!

分享到:

相关文章

国盛量化 | 择时雷达六面图:市场流动性和情绪面继续改善

国盛量化 | 择时雷达六面图:市场流动性和情绪面继续改善

择时雷达六面图:市场流动性和情绪面继续改善国盛金工的择时雷达六面图主要综合了宏观流动性、宏观经济、市场估值、资金流向、技术指标、情绪指标这六个维度的信息,使用了三十多个指标对未来权益市场给出择时观点并...

【国联基金研究】养老金产品蓬勃发展,助力补充养老

【国联基金研究】养老金产品蓬勃发展,助力补充养老

养老金产品蓬勃发展,助力补充养老国联|基金研究 | 朱人木根据《证券期货投资者适当性管理办法》,本微信平台所载内容仅供国联证券客户中专业投资者参考使用。若您非国联证券客户中的专业投资者,为控制投资风险...

【国君金工】资金接力下,回调幅度有限

【国君金工】资金接力下,回调幅度有限

择时观点核心观点:外资流入边际放缓,游资、私募主导的行情下,回调属于正常现象。在经济复苏大逻辑尚未证伪的背景下,市场回调后仍将维持上行方向。复盘与展望:资金接力,游资主导下回调是正常现象。在2022年...

【德邦金工|文献精译】训练语言模型以遵循带有人类反馈的指令——德邦金工文献精译第八期

【德邦金工|文献精译】训练语言模型以遵循带有人类反馈的指令——德邦金工文献精译第八期

 摘要 投资要点这篇报告介绍了ChatGPT语言模型使用的技术。论文标题是《Training language models to follow instructions with...

【中信建投策略】汽车降价潮,风电盈利预期上调——景气估值跟踪解析3月第2期

【中信建投策略】汽车降价潮,风电盈利预期上调——景气估值跟踪解析3月第2期

重要提示:通过本订阅号发布的观点和信息仅供中信建投证券股份有限公司(下称“中信建投”)客户中符合《证券期货投资者适当性管理办法》规定的机构类专业投资者参考。因本订阅号暂时无法设置访问限制,若您并非中信...

权益仓位处于历史极高水平,TMT由欠配迅速转向超配——主动权益基金季报分析2023Q1

权益仓位处于历史极高水平,TMT由欠配迅速转向超配——主动权益基金季报分析2023Q1

摘要主动权益基金整体仓位抬升,基金新发氛围不佳       2023年一季度,主动权益类基金(普通股票型+偏股混合型+灵活配置型,下同)总规模净流入1328亿元...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。