paint-brush
如何为星巴克咖啡的成本训练自己的私人聊天 GPT 模型经过@zhoujieguang
3,158 讀數
3,158 讀數

如何为星巴克咖啡的成本训练自己的私人聊天 GPT 模型

经过 Zhou Jieguang12m2023/06/18
Read on Terminal Reader

太長; 讀書

只需一杯星巴克的成本和两个小时的时间,您就可以拥有自己训练有素的开源大型模型。
featured image - 如何为星巴克咖啡的成本训练自己的私人聊天 GPT 模型
Zhou Jieguang HackerNoon profile picture
0-item
1-item
2-item


只需一杯星巴克的成本和两个小时的时间,您就可以拥有自己训练有素的开源大型模型。模型可以根据不同的训练数据方向进行微调,提升医疗、编程、炒股、恋爱咨询等各种技能,让你的大模型更“懂”你。让我们尝试训练一个由开源 DolphinScheduler 赋能的开源大型模型!

介绍

ChatGPT的民主化

ChatGPT的诞生无疑让我们对AI的未来充满了期待。其精巧的表达方式和强大的语言理解能力令世人惊叹。但是,由于 ChatGPT 是以软件即服务 (SaaS) 的形式提供的,因此个人隐私泄露和企业数据安全问题是每个用户和公司都关心的问题。越来越多的开源大型模型不断涌现,让个人和公司拥有自己的模型成为可能。但是,开源大型模型的入门、优化和使用门槛高,很难让大家轻松上手。为了解决这个问题,我们使用 Apache DolphinScheduler,它为训练、调优和部署开源大型模型提供一键式支持。这使每个人都能够以非常低的成本和技术专长使用他们的数据来训练他们自己的大型模型。

它是给谁的? — 屏幕前的任何人

我们的目标不仅是让专业的 AI 工程师,而且让任何对 GPT 感兴趣的人都能享受拥有一个更好地“理解”他们的模型的乐趣。我们相信每个人都有权利和能力塑造自己的 AI 助手。 Apache DolphinScheduler 直观的工作流程使这成为可能。作为奖励,Apache DolphinScheduler 是一个大数据和 AI 调度工具,在 GitHub 上拥有超过 10,000 颗星。它是 Apache 软件基金会下的顶级项目,这意味着您可以免费使用它并修改代码而无需担心任何商业问题。


无论您是想要用自己的数据训练模型的行业专家,还是想要了解和探索深度学习模型训练的AI爱好者,我们的工作流程都将为您提供便捷的服务。它解决了复杂的预处理、模型训练和优化步骤,只需要1-2小时的简单操作,再加上20小时的运行时间,就可以构建一个更“懂”的ChatGPT大规模模型。

那么让我们开始这个神奇的旅程吧!让我们把人工智能的未来带给每个人。

只需三步,打造更“懂”你的 ChatGPT

  1. 以相当于3090级别的低价租用GPU卡
  2. 启动 DolphinScheduler
  3. 点击DolphinScheduler页面的training workflow和deployment workflow,直接体验你的ChatGPT

准备一台带3090显卡的主机

首先,你需要一块3090显卡。如果你有一台台式电脑,你可以直接使用它。如果没有,网上有很多带GPU的主机出租。这里我们以AutoDL为例进行应用。打开https://www.autodl.com/home ,注册并登录。之后,您可以根据屏幕显示的步骤1、2、3在算力市场中选择对应的服务器。

图片来源:作者自己的图片


这里推荐选择RTX 3090显卡,性价比较高。经过测试,发现一到两个人可以使用RTX 3090进行在线任务。如果你想要更快的训练和响应速度,你可以选择更强大的显卡。训练一次大约需要 20 小时,而测试大约需要 2-3 小时。 40元的预算,轻松搞定。

镜子

点击社区镜像,然后在下图红框中输入WhaleOps/dolphinscheduler-llm/dolphinscheduler-llm-0521 。您可以选择图像,如下所示。目前,只有 V1 版本可用。以后随着新版本的发布,你可以选择最新的。

图片来源:作者自己的图片


如果需要多次训练模型,建议将硬盘容量扩展到100GB左右。


创建完成后,等待下图所示的进度条完成。

启动 DolphinScheduler

为了在界面上部署调试自己的开源大型模型,需要启动DolphinScheduler软件,我们需要做如下配置工作:

访问服务器

有两种方法可用。您可以选择适合您的喜好:

  1. 通过 JupyterLab 登录(非编码人员):

单击如下所示的 JupyterLab 按钮。

图片来源:作者自己的图片


该页面将重定向到 JupyterLab;从那里,您可以单击“终端”进入。

图片来源:作者自己的图片


2. 通过终端登录(适用于程序员):

我们可以通过下图所示的按钮获取SSH连接命令。

图片来源:作者自己的图片


然后,通过终端建立连接。

图片来源:作者自己的图片


导入 DolphinScheduler 的元数据

在 DolphinScheduler 中,所有的元数据都存储在数据库中,包括工作流定义、环境配置、租户信息等。为了方便用户在 DolphinScheduler 启动时看到这些工作流,我们可以通过复制直接导入预定义的工作流元数据从屏幕上。


修改导入数据到MySQL的脚本:

使用终端,导航到以下目录:

cd apache-dolphinscheduler-3.1.5-bin


执行命令: vim import_ds_metadata.sh ,打开import_ds_metadata.sh文件。文件内容如下:



Set variables

Hostname

HOST="xxx.xxx.xxx.x"


UsernameUSERNAME="root"PasswordPASSWORD="xxxx"PortPORT=3306Database to import intoDATABASE="ds315_llm_test"SQL filenameSQL_FILE="ds315_llm.sql"mysql -h $HOST -P $PORT -u $USERNAME -p$PASSWORD -e "CREATE DATABASE $DATABASE;"mysql -h $HOST -P $PORT -u $USERNAME -p$PASSWORD $DATABASE < $SQL_FILE


将xxx.xxx.xxx.x和xxxx替换为自己公网MySQL数据库的相关配置值(可以在阿里云、腾讯云申请,也可以自己安装)。然后执行:

bash import_ds_metadata.sh


执行完后,有兴趣的可以查看数据库中相应的元数据(连接MySQL查看,不熟悉代码的跳过这一步)。

图片来源:作者自己的图片


启动 DolphinScheduler

在服务端命令行,打开如下文件,修改配置,将DolphinScheduler与之前导入的数据库连接起来:


/root/apache-dolphinscheduler-3.1.5-bin/bin/env/dolphinscheduler_env.sh


修改数据库部分的相关配置,其他部分不变。将'HOST'和'PASSWORD'的值修改为导入数据库的配置值,即xxx.xxx.xxx.x和xxxx:


export DATABASE=mysqlexport SPRING_PROFILES_ACTIVE=${DATABASE}export SPRING_DATASOURCE_URL="jdbc:mysql://HOST:3306/ds315_llm_test?useUnicode=true&characterEncoding=UTF-8&useSSL=false"export SPRING_DATASOURCE_USERNAME="root"export SPRING_DATASOURCE_PASSWORD="xxxxxx"......


配置好后,执行(也是在/root/apache-dolphinscheduler-3.1.5-bin这个目录下):

bash ./bin/dolphinscheduler-daemon.sh start standalone-server


执行后,我们可以使用tail -200f standalone-server/logs/dolphinscheduler-standalone.log检查日志。至此,DolphinScheduler 正式启动!


启动服务后,我们可以在 AutoDL 控制台中点击“Custom Services”(以红色突出显示)重定向到一个 URL:

图片来源:作者自己的图片


打开 URL 后,如果显示 404 错误,请不要担心。只需将后缀 /dolphinscheduler/ui 附加到 URL:

图片来源:作者自己的图片

AutoDL模块开放6006端口,将DolphinScheduler的端口配置为6006后,可以通过提供的入口访问。但是,由于 URL 重定向,您可能会遇到 404 错误。在这种情况下,您需要手动完成 URL。



登录信息:

用户名: admin

密码: dolphinscheduler123


登录后,点击“项目管理”,可以看到名为“vicuna”的预定义项目。点击“vicuna”进入项目。

图片来源:作者自己的图片


开源大型模型训练和部署

工作流定义

进入Vicuna项目后,您会看到三个工作流程:Training、Deploy和Kill_Service。让我们探索它们的用途以及如何配置大型模型和训练数据。

图片来源:作者自己的图片


您可以点击下面的运行按钮来执行相应的工作流程。

图片来源:作者自己的图片


训练

通过单击培训工作流程,您将看到两个定义。一种是通过Lora(主要使用alpaca-lora, https://github.com/tloen/alpaca-lora )对模型进行微调,另一种是将训练好的模型与基础模型合并得到最终模型.

图片来源:作者自己的图片


工作流有如下参数(点击运行后弹出):


  • base_model:基础模型,可根据需要选择下载。开源大模型仅供学习和体验之用。当前默认为 TheBloke/vicuna-7B-1.1-HF。
  • data_path:你的个性化训练数据和领域特定数据的路径,默认为/root/demo-data/llama_data.json。
  • lora_path:保存训练好的Lora权重的路径,/root/autodl-tmp/vicuna-7b-lora-weight。
  • output_path:合并基础模型和Lora权重后最终模型的保存路径,记下,部署时需要用到。
  • num_epochs:训练参数,训练epochs的个数。测试时可设为1,一般设为3~10。
  • cutoff_len:最大文本长度,默认为 1024。
  • micro_batch_size:批量大小。

图片来源:作者自己的图片


部署

部署大模型的工作流程(主要使用FastChat, https://github.com/lm-sys/FastChat )。它将首先调用 kill_service 来杀死已部署的模型,然后依次启动控制器、添加模型,然后打开 Gradio web 服务。

图片来源:作者自己的图片


启动参数如下:

图片来源:作者自己的图片


  • model:模型路径,可以是Huggingface模型ID,也可以是我们训练的模型路径,即上面训练流程的output_path。默认为 TheBloke/vicuna-7B-1.1-HF。如果使用默认,则直接部署vicuna-7b模型。

终止服务

此工作流程用于终止已部署的模型并释放 GPU 内存。此工作流没有参数,您可以直接运行它。如果需要停止部署的服务(比如需要重新训练模型或者GPU显存不足的时候),可以直接执行kill_service工作流来kill掉部署的服务。


通过几个示例后,您的部署将完成。下面我们来看看实际操作:

大型模型操作示例

  1. 训练大型模型

通过执行训练工作流并选择默认参数直接启动工作流。

图片来源:作者自己的图片


右击对应任务查看日志,如下图:

图片来源:作者自己的图片


您还可以在侧边栏左下方的任务实例面板中查看任务状态和日志。训练过程中,可以通过查看日志监控进度,包括当前训练步数、loss metrics、剩余时间等。有一个进度条表示当前步数,其中step = (data size * epoch) / batch尺寸。

图片来源:作者自己的图片


训练完成后,日志将如下所示:

图片来源:作者自己的图片


更新您的个性化训练数据

我们的默认数据位于/root/demo-data/llama_data.json中。目前的数据来源是华佗,一种使用中国医学数据微调的医学模型。是的,我们的例子是培训家庭医生:

图片来源:作者自己的图片


如果特定字段有数据,可以指向自己的数据,数据格式如下:


每行一个JSON,字段含义为:

  • instruction ****:给模型的指令。
  • 输入:输入。
  • 输出:预期的模型输出。

例如:

{"instruction": "calculation", "input": "1+1 equals?", "output": "2"}


请注意,您可以将指令和输入字段合并为一个指令字段。输入字段也可以留空。


训练时,修改data_path参数,执行自己的数据。


笔记:


在第一次训练执行期间,基础模型将从指定位置获取,例如 TheBloke/vicuna-7B-1.1-HF。会有一个下载过程,请等待下载完成。该模型的选择由用户决定,您也可以选择下载其他开源大模型(使用时请遵守相关许可)。


由于网络问题,基础模型下载可能会在第一次训练执行中途失败。在这种情况下,您可以单击失败的任务并选择重新运行它以继续训练。操作如下图:

图片来源:作者自己的图片


要停止训练,可以单击停止按钮,这将释放用于训练的 GPU 内存。

部署工作流

在工作流定义页面上,单击部署工作流以运行它并部署模型。

图片来源:作者自己的图片


如果您还没有训练过自己的模型,可以使用默认参数 TheBloke/vicuna-7B-1.1-HF 执行 deploy 工作流来部署vicuna-7b模型,如下图所示:

图片来源:作者自己的图片


如果您在上一步中训练了模型,您现在可以部署您的模型。部署后,您可以体验自己的大型模型。启动参数如下,这里需要填写上一步模型的output_path

图片来源:作者自己的图片


接下来,让我们进入部署的工作流实例。单击工作流实例,然后单击带有“部署”前缀的工作流实例。

图片来源:作者自己的图片

右键单击并选择“refresh_gradio_web_service”以查看任务日志并找到我们的大模型链接的位置。


操作如下图:

图片来源:作者自己的图片



在日志中,您会找到一个可以公开访问的链接,例如:

图片来源:作者自己的图片


这里有两个链接。 0.0.0.0:7860这个链接无法访问,因为AutoDL只开放了6006端口,这个端口已经被dolphinscheduler占用了。您可以直接访问它下面的链接,例如[https://81c9f6ce11eb3c37a4.gradio.live.](https://81c9f6ce11eb3c37a4.gradio.live.)


请注意,此链接可能会在您每次部署时发生变化,因此您需要从日志中重新找到它。


输入链接后,您将看到您自己的 ChatGPT 的对话页面!

图片来源:作者自己的图片


图片来源:作者自己的图片


是的!现在您拥有自己的 ChatGPT,它的数据只为您服务!


而你只花了不到一杯咖啡的成本~~


来吧,体验您自己的私人 ChatGPT!

概括

在这个数据驱动和技术导向的世界中,拥有专用的 ChatGPT 模型具有不可估量的价值。随着人工智能和深度学习的进步,我们正处在一个可以塑造个性化AI助手的时代。训练和部署您自己的 ChatGPT 模型可以帮助我们更好地了解 AI 以及它如何改变我们的世界。


总之,自行训练和部署 ChatGPT 模型可以帮助您保护数据安全和隐私,满足特定的业务需求,节省技术成本,并使用 DolphinScheduler 等工作流工具自动化训练过程。它还允许您遵守当地的法律法规。因此,自行训练和部署 ChatGPT 模型是一个值得考虑的选择。


重要笔记:

  • 数据安全和隐私:通过公共 API 服务使用 ChatGPT 时,您可能会担心数据安全和隐私。这是一个合理的担忧,因为您的数据可能会通过网络传输。通过自行训练和部署模型,您可以确保您的数据仅在您自己的设备或租用的服务器上存储和处理,确保数据安全和隐私。
  • Domain-Specific Knowledge:对于具有特定业务需求的组织或个人,训练您自己的 ChatGPT 模型可确保该模型具有与您的业务相关的最新和最相关的知识。无论您的业务领域如何,针对您的业务需求专门训练的模型都将比通用模型更有价值。
  • 投资成本:使用 OpenAI 的 ChatGPT 模型可能会产生一定的成本。同样,如果你想自己训练和部署模型,你也需要投入资源和产生技术成本。例如,低至40元即可体验调试大机型,但如果打算长期运行,建议购买英伟达RTX 3090显卡或租用云服务器。因此,您需要权衡利弊,选择最适合您具体情况的解决方案。
  • DolphinScheduler:通过使用 Apache DolphinScheduler 的工作流,可以自动化整个训练过程,大大降低技术门槛。即使您没有广泛的算法知识,也可以借助此类工具成功训练自己的模型。 DolphinScheduler除了支持大模型训练,还支持大数据调度和机器学习调度,帮助您和您的非技术人员轻松搞定大数据处理、数据准备、模型训练和模型部署。此外,它是开源的,可以免费使用。
  • 对开源大模型的法律法规约束: DolphinScheduler 只是一个可视化 AI 工作流工具,不提供任何开源大模型。在使用和下载开源大型模型时,您必须了解与每个模型相关的不同使用限制,并遵守各自的开源许可。本文给出的例子仅供个人学习和体验之用。使用大型模型时,确保遵守开源模型许可非常重要。此外,不同的国家对数据存储和处理有不同的严格规定。使用大型模型时,您必须自定义和调整模型以符合您所在地的特定法律法规和政策。这可能包括对模型输出进行特定过滤,以符合当地隐私和敏感信息处理法规。


也发布在这里