作者:小傅哥


博客:https://bugstack.cn

沉淀、分享、成长,让自己和他人都能有所收获!

最近 ChatGPT 很火,火到了各行各业。记得去年更多的还是码农最新体验后拿它搜代码,现在各行各业都进来体验,问它咋理财、怎么写报告和给小孩起名。 也因此让小傅哥在头条的一篇关于 ChatGPT 的文章都有了26万的阅读。

除了大家都想体验一下这款智能的 ChatGPT AI,也有很多互联网公司开始搭建自己的 ChatGPT,但真的挺担心最后整出来的不是 ChatGPT 而是 ChatPPT。为此我也想研究下 ChatGPT 是怎么做出来的,都说是模型和数据训练,那我能训练吗?这东西离我想做个 demo 出来有多远?

一、技术调研,很激动

当我开始往算法模型训练里踏进一脚,漏个门缝检索点相关学习资料和案例代码,发现这个世界太庞大了。早在4年前,GPT-2 就已经发布了 openai 开源代码 https://github.com/openai/gpt-2 也就是说我们就可以拿 GPT-2 的开源代码训练一个模型,哪怕是训练出个傻子,也应该比“xxx,我在,你说。”要更智能一些。

接着检索我发现了,早在2年前有人已经基于 GPT-2 训练一版 GPT2 for Chinese chitchat/用于中文闲聊的GPT2模型。开源代码:https://github.com/yangjianxin1/GPT2-chitchat

不知道在做的兄弟们你们激动不,看到这我是挺开心。这不是我想要的 demo 模型吗。把它给训练出来,也就能满足我对 ChatGPT的深入了解了,并且基于我想做的任何类数据训练得到一个个小模型部署,也是可以帮助我来完成一些事情的。如;你把公司的一些文档数据进行训练,得到一份可以搜索检索就能获取相关数据的 ChatGPT 不挺爽吗?

越是检索越是开心,离我的目标也越来越近了。但作为一个量化算法训练的小白,其实我还是希望能找到一份 Java 的模型训练代码,这可以让我操作起来更加顺畅。没错,我找到了,也是3年前就有的一份资料;https://github.com/SimiaCryptus/tf-gpt-2 这是一个基于 Tensorflow 的 GPT-2 文本模型的 Java 库。—— 别着急,这个时候我也不知道 Tensorflow 是啥。

这还说啥,这有pom配置,还有代码案例。引入一下就能跑,上车吧!

好家伙,跑起代码才知道。这货上来就下了1个多G的pb模型数据,之后有报错 Mac M1 兼容性问题。折腾一大堆,最后又报错;Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.2 AVX AVX2 FMA —— 要是你咋整,你再坚持坚持,还是放弃!

二、风浪越大,鱼越贵

本来以为 ChatGPT 嘛、Python 嘛、跑个数据模型吗!这能几道墙阻挡我的去路,不就是换个工具写代码吗?但当我逐步进入后发现,这距离好像比想象的大的多!

想玩 ChatGpt 玩到模型训练,得先进入 Gpt-2 开源代码。基于想自己训练一个小模型,需要使用 TensorFlow 创建生产级机器学习模型。而 TensorFlow 需要在本地安装一系列 Python 工具并下载模型和数据样本。而这里就像安装 JDK 一样,是傻子都会和傻子都不会。Mac M1 天生骄傲,安装了2天,才测试出可以使用的模型训练环境。之后开始跑第一个模型,线性回归。再了解什么是线性回归。

这是 TensorFlow 的官网,用于创建生产级机器学习模型。也就是说想要完成一个简单的 ChatGPT 得从这开始。—— 死鬼,不要在想了,你总是得从 HelloWorld 开始。

但在检索的过程中,我又找到了一个名叫 huggingface.co 的网站;Hugging face 起初是一家总部位于纽约的聊天机器人初创服务商,他们本来打算创业做聊天机器人,然后在 Github上开源了一个 Transformers 库。虽然聊天机器人业务没搞起来,但是他们的这个库在机器学习社区迅速大火起来。目前已经共享了超100,000个预训练模型,10,000个数据集,变成了机器学习界的 Github。

在 Hugging face 社区中可以找到相关的模型训练资源以及提供好的模型使用接口,比如像中文分词、聊天对话、图片分析也都有,当然也包括一些公司训练出来的 gpt-2 模型。

在 Models 中提供了大量的算法模型,你可以把自己需要的模型点个 like 关注起来。同时这些模型还提供好了调用接口,例如【api key 可以在网站申请】;

curl https://api-inference.huggingface.co/models/microsoft/CodeGPT-small-java \
-X POST \
-d '{"inputs": "Can you please let us know more details about your "}' \
-H "Authorization: Bearer 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"

你可以通过接口对模型进行访问,当然这些模型训练的数据并不是很大,只是作为测试使用。不会像 ChatGPT 那么智能的返回你所检索的信息。不过这至少可以让你了解和体验不同模型所带来的数据返回是什么样。

三、环境配置,搞起来

一口不能呲个胖子,为了更好的为以后能训练出一个自己可以玩的小体量的 ChatGPT 模型,总得要从头开始。

这里小傅哥的目标是带着搭建先在本地搭建起一个 TensorFlow 的基础环境,来跑个 Python 的简单算法模型。为此我们需要进行一下环境配置。小傅哥2台机器已验证没问题,分别是 Mac Intel/M1,机器配置4核16G。

1. Python 环境

  • 下载 Python:https://www.python.org/downloads/macos/ 3.6版本以上。一般 Mac 上会带一个 2.x 版本的 Python,这个版本不够用,需要升级下。
  • 配置 Python:
    • 安装 Python 完成后,搜索地址 which python3
    • 打开 vi ~/.bash_profile 文件,写入环境配置 alias python="/Library/Frameworks/Python.framework/Versions/3.10/bin/python3"
    • 生效配置 source .bash_profile

2. pip 指令安装

  • 安装 pip:以下需要用到 pip 指令,如果没有需要安装 curl https://bootstrap.pypa.io/get-pip.py | python3

3. Tensorflow

官网安装指导:https://www.tensorflow.org/install?hl=zh-cn

但这里有个问题,没有说明 Mac M1 怎么安装。如果按照这个代码在 M1 的机器是安装不上的。所以在小傅哥的一顿折腾后找到了对应的按照指令。步骤如下;

  • 下载代码【可选】:https://github.com/fuzhengwei/TensorFlow-Tutorial - 用于后续测试模型训练代码
  • 配置 Visual Studio【你也可以是其他的】,打开以后需要安装 python 插件以及配置登录 github,这样会更利于后续的操作。之后在 Visual Studio 的终端下,查看下 python -V 的版本,如果不是最新安装的 3.x 版本,可以刷新下配置 source .bash_profile
  • Mac 电脑安装 Tensorflow:python3 -m pip install tensorflow-macos —— 安装比较耗时,需要等待。如果失败了就继续执行这条指令。
  • 安装后测试:python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))" —— 只要能输出结果为即可。

四、跑个模型,验证下

可能很多伙伴不知道什么是算法模型,简单描述比如;为啥给你推荐你喜欢看的美女,为啥给你发送一个键盘购物券、为啥看你小子有钱就总给你推荐豪车。这都是根据你身上的标签进行模型训练的结果,在众多的人群中找到目标用户。另外像我在腾讯做量化算法的小伙伴说,决策树就是一种简单的算法模型。

代码详见https://github.com/fuzhengwei/TensorFlow-Tutorial

测试结果

fuzhengwei@MacBook-Pro TensorFlow-Tutorial % /usr/local/bin/python3 /Users/fuzhengwei/1024/github/TensorFlow-Tutorial/codes/linear_regression.py
Epoch 1/500
1/1 [==============================] - 0s 3ms/step - loss: 0.0150
Epoch 500/500
1/1 [==============================] - 0s 2ms/step - loss: 0.0150
1/1 [==============================] - 0s 76ms/step
[[-0.19686729]]
1/1 [==============================] - 0s 29ms/step
[[-1.0953956]]
1/1 [==============================] - 0s 29ms/step
[[-1.9939239]]
1/1 [==============================] - 0s 31ms/step
[[-2.8924522]]
1/1 [==============================] - 0s 30ms/step
[[-3.7909803]]
1/1 [==============================] - 0s 30ms/step
[[-8.283622]]
  • 这是一个训练了500次的线性回归预测模型;
  • 线性回归可以预测房价、预测股票、预测天气和评估经济。

这一篇文章先给我自己以及大家对 ChatGPT 开个门,让对此感兴趣的编程爱好者可以参与进去学习。在我感觉 ChatGPT 的出现会打破某些平衡,对一些事项进行秩序重置。因此也让更多的人获得了大量的机会。如果你还没有体验到 ChatGPT 的能力,那么可以点击链接对它提问体验。这是小傅哥注册 ChatGPT API Keys 接口,并对接到下面程序中使用的。

搭个ChatGPT算法模型,离Java程序员有多远?的更多相关文章

  1. Java程序员岗位

    Java程序员岗位面试题有哪些?   1.面向对象的特征有哪些方面(1)抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择 ...

  2. 转载:java程序员如何拿到2万月薪

    作者:匿名用户链接:https://www.zhihu.com/question/39890405/answer/83676977来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  3. 工作了3年的JAVA程序员应该具备什么技能?(zhuan)

    http://www.500d.me/article/5441.html **************************************** 来源:五百丁 作者:LZ2016-03-18 ...

  4. Java程序员面试题集(71-85)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17566627 Java程序员面试题集(71-85) 摘要:这一部分主要包括了UML(统一建模语言) ...

  5. Java程序员面试题集(51-70)(转)

    转:http://blog.csdn.net/jackfrued/article/details/17403101 Java程序员面试题集(51-70) 摘要:这一部分主要讲解了异常.多线程.容器和I ...

  6. 高级Java程序员的技术进阶之路

      据不完全统计,截至目前(2017.07)为止,中国Java程序员的数量已经超过了100万.而且,随着IT培训业的持续发展和大量的应届毕业生进入社会,Java程序员面临的竞争压力越来越大.那么,作为 ...

  7. Efficient&Elegant:Java程序员入门Cpp

    最近项目急需C++ 的知识结构,虽说我有过快速学习很多新语言的经验,但对于C++ 老特工我还需保持敬畏(内容太多),本文会从一个Java程序员的角度,制定高效学习路线快速入门C++ . Java是为了 ...

  8. JAVA程序员面试宝典

    程序员面试之葵花宝典 面向对象的特征有哪些方面    1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...

  9. 一个3年Java程序员的坎与选择

    前言 LZ 15年本科毕业,不知不觉3年过去了,去年底裸辞回到成都来发展,年后开始找工作,面试了几家公司,现在整理整理做个总结,也方便规划下一个3到5年以及和广大想要进阶的Java程序员同胞们共勉. ...

  10. 聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路

    引言 很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想说,这位同学你站出来,保证不打死你,-_-),原文章名称叫做<回答阿里社招面试 ...

随机推荐

  1. perl reverse函数

    转载至  Perl - 列表 - reverse 操作 reverse(逆转)操作将输入的一串列表(可能是数组)按相反的顺序返回. my @arr=("Head_PMA1",&qu ...

  2. Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践

    本文作者:胡泰室, 快手Java开发工程师. ​ 认识Apache ShenYu(神禹) 网关最重要的是流量治理,而流量治理与大禹治水有很多相似的地方,因此,网关的流量治理项目被命名为神禹. Shen ...

  3. 搭建K8S集群前置条件

    搭建K8S集群 搭建k8s环境平台规划 单master集群 单个master节点,然后管理多个node节点 多master集群 多个master节点,管理多个node节点,同时中间多了一个负载均衡的过 ...

  4. 2022ICPC区域赛参后感悟

    第一次参加正式的大类赛事,在某种程度上挺激动的.我呢,可以说是刚步入竞赛一年,在此期间遇见了一些志同道合的朋友,最重要的是遇见了我的队友. 开始前,我幻想过我们小队可以超常发挥,拿取学校中第一个区域赛 ...

  5. .NET深入了解哈希表和Dictionary

    引子 问题:给定一串数字{1,2,5,7,15,24,33,52},如何在时间复杂度为O(1)下,对数据进行CURD? 数组:我创建一个Length为53的数组,将元素插入相同下标处,是不是就可以实现 ...

  6. VMware 虚拟机打开电源失败

    vmware上虚拟机关机导出ovf失败后,再次启动虚拟机,突然无法打开虚拟机,并伴随如下报错: 模块"disk"打开电源失败,无法打开磁盘/***/.../***.vmdk 解决方 ...

  7. mysql管理工具mysqladmin的使用

    1. 初始化密码 mysqladmin -uroot -p'password' password 'new-password' [root@controller3 ~]# yum -y install ...

  8. 【Java并发004】原理层面:synchronized关键字全解析

    一.前言 synchronized关键字在需要原子性.可见性和有序性这三种特性的时候都可以作为其中一种解决方案,看起来是"万能"的.的确,大部分并发控制操作都能使用synchron ...

  9. 云原生之旅 - 14)遵循 GitOps 实践的好工具 ArgoCD

    前言 Argo CD 是一款基于 kubernetes 的声明式的Gitops 持续部署工具. 应用程序定义.配置和环境都是声明式的,并受版本控制 应用程序部署和生命周期管理都是自动化的.可审计的,并 ...

  10. C# Panel动态添加滚动条

    /// <summary> /// panel控件的事件:在向该控件添加控件时发生 /// </summary> private void panel1_ControlAdde ...