作者:小傅哥
博客:https://bugstack.cn
最近 ChatGPT 很火,火到了各行各業(yè)。記得去年更多的還是碼農(nóng)最新體驗(yàn)后拿它搜代碼,現(xiàn)在各行各業(yè)都進(jìn)來體驗(yàn),問它咋理財(cái)、怎么寫報(bào)告和給小孩起名。 也因此讓小傅哥在頭條的一篇關(guān)于 ChatGPT 的文章都有了26萬的閱讀。
除了大家都想體驗(yàn)一下這款智能的 ChatGPT AI,也有很多互聯(lián)網(wǎng)公司開始搭建自己的 ChatGPT,但真的挺擔(dān)心最后整出來的不是 ChatGPT 而是 ChatPPT。為此我也想研究下 ChatGPT 是怎么做出來的,都說是模型和數(shù)據(jù)訓(xùn)練,那我能訓(xùn)練嗎???這東西離我想做個(gè) demo 出來有多遠(yuǎn)?
一、技術(shù)調(diào)研,很激動(dòng)
當(dāng)我開始往算法模型訓(xùn)練
里踏進(jìn)一腳,漏個(gè)門縫檢索點(diǎn)相關(guān)學(xué)習(xí)資料和案例代碼,發(fā)現(xiàn)這個(gè)世界太龐大了。早在4年前,GPT-2 就已經(jīng)發(fā)布了 openai 開源代碼 https://github.com/openai/gpt-2 也就是說我們就可以拿 GPT-2 的開源代碼訓(xùn)練一個(gè)模型,哪怕是訓(xùn)練出個(gè)傻子,也應(yīng)該比“xxx,我在,你說?!币悄芤恍??。
接著檢索我發(fā)現(xiàn)了,早在2年前有人已經(jīng)基于 GPT-2 訓(xùn)練一版 GPT2 for Chinese chitchat/用于中文閑聊的GPT2模型。開源代碼:https://github.com/yangjianxin1/GPT2-chitchat
不知道在做的兄弟們你們激動(dòng)不,看到這我是挺開心。這不是我想要的 demo 模型嗎。把它給訓(xùn)練出來,也就能滿足我對(duì) ChatGPT的深入了解了,并且基于我想做的任何類數(shù)據(jù)訓(xùn)練得到一個(gè)個(gè)小模型部署,也是可以幫助我來完成一些事情的。如;你把公司的一些文檔數(shù)據(jù)進(jìn)行訓(xùn)練,得到一份可以搜索檢索就能獲取相關(guān)數(shù)據(jù)的 ChatGPT 不挺爽嗎?
越是檢索越是開心,離我的目標(biāo)也越來越近了。但作為一個(gè)量化算法訓(xùn)練的小白,其實(shí)我還是希望能找到一份 Java 的模型訓(xùn)練代碼,這可以讓我操作起來更加順暢。沒錯(cuò),我找到了,也是3年前就有的一份資料;https://github.com/SimiaCryptus/tf-gpt-2 這是一個(gè)基于 Tensorflow 的 GPT-2 文本模型的 Java 庫?!?別著急,這個(gè)時(shí)候我也不知道 Tensorflow 是啥。
這還說啥,這有pom配置,還有代碼案例。引入一下就能跑,上車吧!
好家伙,跑起代碼才知道。這貨上來就下了1個(gè)多G的pb模型數(shù)據(jù),之后有報(bào)錯(cuò) Mac M1 兼容性問題。折騰一大堆,最后又報(bào)錯(cuò);Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.2 AVX AVX2 FMA
—— 要是你咋整,你再堅(jiān)持堅(jiān)持,還是放棄!
二、風(fēng)浪越大,魚越貴
本來以為 ChatGPT 嘛、Python 嘛、跑個(gè)數(shù)據(jù)模型嗎!這能幾道墻阻擋我的去路,不就是換個(gè)工具寫代碼嗎?但當(dāng)我逐步進(jìn)入后發(fā)現(xiàn),這距離好像比想象的大的多!
想玩 ChatGpt 玩到模型訓(xùn)練,得先進(jìn)入 Gpt-2 開源代碼?;谙胱约河?xùn)練一個(gè)小模型,需要使用 TensorFlow 創(chuàng)建生產(chǎn)級(jí)機(jī)器學(xué)習(xí)模型。而 TensorFlow 需要在本地安裝一系列 Python 工具并下載模型和數(shù)據(jù)樣本。而這里就像安裝 JDK 一樣,是傻子都會(huì)和傻子都不會(huì)。Mac M1 天生驕傲,安裝了2天,才測試出可以使用的模型訓(xùn)練環(huán)境。之后開始跑第一個(gè)模型,線性回歸。再了解什么是線性回歸。
這是 TensorFlow 的官網(wǎng),用于創(chuàng)建生產(chǎn)級(jí)機(jī)器學(xué)習(xí)模型。也就是說想要完成一個(gè)簡單的 ChatGPT 得從這開始?!?死鬼,不要在想了,你總是得從 HelloWorld 開始。
但在檢索的過程中,我又找到了一個(gè)名叫 huggingface.co 的網(wǎng)站;Hugging face 起初是一家總部位于紐約的聊天機(jī)器人初創(chuàng)服務(wù)商,他們本來打算創(chuàng)業(yè)做聊天機(jī)器人,然后在 Github上開源了一個(gè) Transformers 庫。雖然聊天機(jī)器人業(yè)務(wù)沒搞起來,但是他們的這個(gè)庫在機(jī)器學(xué)習(xí)社區(qū)迅速大火起來。目前已經(jīng)共享了超100,000個(gè)預(yù)訓(xùn)練模型,10,000個(gè)數(shù)據(jù)集,變成了機(jī)器學(xué)習(xí)界的 Github。
在 Hugging face 社區(qū)中可以找到相關(guān)的模型訓(xùn)練資源以及提供好的模型使用接口,比如像中文分詞、聊天對(duì)話、圖片分析也都有,當(dāng)然也包括一些公司訓(xùn)練出來的 gpt-2 模型。
在 Models 中提供了大量的算法模型,你可以把自己需要的模型點(diǎn)個(gè) like 關(guān)注起來。同時(shí)這些模型還提供好了調(diào)用接口,例如【api key 可以在網(wǎng)站申請(qǐng)】;
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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"
你可以通過接口對(duì)模型進(jìn)行訪問,當(dāng)然這些模型訓(xùn)練的數(shù)據(jù)并不是很大,只是作為測試使用。不會(huì)像 ChatGPT 那么智能的返回你所檢索的信息。不過這至少可以讓你了解和體驗(yàn)不同模型所帶來的數(shù)據(jù)返回是什么樣。
三、環(huán)境配置,搞起來
一口不能呲個(gè)胖子
,為了更好的為以后能訓(xùn)練出一個(gè)自己可以玩的小體量的 ChatGPT 模型,總得要從頭開始。
這里小傅哥的目標(biāo)是帶著搭建先在本地搭建起一個(gè) TensorFlow 的基礎(chǔ)環(huán)境,來跑個(gè) Python 的簡單算法模型。為此我們需要進(jìn)行一下環(huán)境配置。小傅哥2臺(tái)機(jī)器已驗(yàn)證沒問題,分別是 Mac Intel/M1,機(jī)器配置4核16G。
1. Python 環(huán)境
-
- 下載 Python:https://www.python.org/downloads/macos/ 3.6版本以上。一般 Mac 上會(huì)帶一個(gè) 2.x 版本的 Python,這個(gè)版本不夠用,需要升級(jí)下。配置 Python:
-
- 安裝 Python 完成后,搜索地址
-
which python3
-
-
- 打開 vi ~/.bash_profile 文件,寫入環(huán)境配置
-
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
官網(wǎng)安裝指導(dǎo):https://www.tensorflow.org/install?hl=zh-cn
但這里有個(gè)問題,沒有說明 Mac M1 怎么安裝。如果按照這個(gè)代碼在 M1 的機(jī)器是安裝不上的。所以在小傅哥的一頓折騰后找到了對(duì)應(yīng)的按照指令。步驟如下;
-
- 下載代碼【可選】:https://github.com/fuzhengwei/TensorFlow-Tutorial - 用于后續(xù)測試模型訓(xùn)練代碼配置 Visual Studio【你也可以是其他的】,打開以后需要安裝 python 插件以及配置登錄 github,這樣會(huì)更利于后續(xù)的操作。之后在 Visual Studio 的終端下,查看下 python -V 的版本,如果不是最新安裝的 3.x 版本,可以刷新下配置
source .bash_profile
-
- 。Mac 電腦安裝 Tensorflow:
python3 -m pip install tensorflow-macos
- ?—— 安裝比較耗時(shí),需要等待。如果失敗了就繼續(xù)執(zhí)行這條指令。
-
- 安裝后測試:
python3 -c "import tensorflow as tf; print(tf.reduce_sum(tf.random.normal([1000, 1000])))"
- —— 只要能輸出結(jié)果為即可。
四、跑個(gè)模型,驗(yàn)證下
可能很多伙伴不知道什么是算法模型,簡單描述比如;為啥給你推薦你喜歡看的美女,為啥給你發(fā)送一個(gè)鍵盤購物券、為啥看你小子有錢就總給你推薦豪車。這都是根據(jù)你身上的標(biāo)簽進(jìn)行模型訓(xùn)練的結(jié)果,在眾多的人群中找到目標(biāo)用戶。另外像我在騰訊做量化算法的小伙伴說,決策樹就是一種簡單的算法模型。
代碼詳見:https://github.com/fuzhengwei/TensorFlow-Tutorial
測試結(jié)果
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]]
- 這是一個(gè)訓(xùn)練了500次的線性回歸預(yù)測模型;線性回歸可以預(yù)測房價(jià)、預(yù)測股票、預(yù)測天氣和評(píng)估經(jīng)濟(jì)。
這一篇文章先給我自己以及大家對(duì) ChatGPT 開個(gè)門,讓對(duì)此感興趣的編程愛好者可以參與進(jìn)去學(xué)習(xí),也為后續(xù)我們訓(xùn)練一個(gè)自己的GPT2對(duì)話聊天模型做準(zhǔn)備。
在我感覺 ChatGPT 的出現(xiàn)會(huì)打破某些平衡,對(duì)一些事項(xiàng)進(jìn)行秩序重置。因此也讓更多的人獲得了大量的機(jī)會(huì)。如果你還沒有體驗(yàn)到 ChatGPT 的能力,那么可以掃碼下面這個(gè)二維碼對(duì)它提問體驗(yàn)。這是小傅哥注冊(cè) ChatGPT API Keys 接口,并對(duì)接到下面程序中使用的。