隨著時間的推移,大模型的訓練成本再降,如今只需幾百美元,就可以復現 GPT-2。
編譯 | 蘇宓
出品 | CSDN(ID:CSDNnews)
OpenAI 在 2019 年推出了 GPT-2 時,據外媒 Tom‘s Hardware 報道稱,當時訓練費用為每小時 256 美元。 如今五年過去了,隨著 GPT-4 以及旗艦級 GPT-4o 的到來,AI 大模型的訓練成本是否降了?
對此,特斯拉前 AI 總監、OpenAI 聯合創始人 Andrej Karpathy 於近日 重現 GPT-2 計畫之後 給出了具體的答案,其表示,「今天,你可以花費 約 672 美元訓練自己的模型,在一個 8XH100 GPU 節點上執行 24 小時。」 事實證明,硬體、軟體和數據方面的進步意味著訓練同一個模型所需的時間和金錢都會減少。
與此同時,Andrej Karpathy 還在自己的 GitHub 計畫頁面(https://github.com/karpathy/llm.c/discussions/677)中分享了整個重現的過程,我們不妨來看看這位大神是怎麽做的。
只用 672 美元的價格在 24 小時內重現 GPT-2 模型
值得一提的是, Andrej Karpathy 於今年 2 月宣布從 OpenAI 友好地離職後,沒多久,他就 帶來了自己徒手編寫的 1000 行 C 程式碼即實作 GPT-2 訓練的新計畫—— LLM.c (https://github.com/karpathy/llm.c)。 在這個計畫基礎上,Andrej Karpathy 時下直接重現了完整的 15.58 億個參數的 GPT-2 計畫,就是彼時 OpenAI 在【更好的語言模型及其影響】(https://openai.com/index/better-language-models/)中介紹的那個 GPT-2。
Andrej Karpathy 表示,llm.c 直接在 C/CUDA 中完成(共約 5000 行程式碼),而不需要傳統的訓練棧,該堆疊涉及到了 Python 直譯器和 PyTorch/JAX、huggingface/transformers 等明顯更復雜的深度學習庫。
2019 年,訓練 GPT-2 是一個需要整個團隊參與的計畫,被認為是一次大型模型執行實踐,但 5 年後的今天,由於計算(H100 GPU)、軟體(CUDA、cuBLAS、cuDNN、FlashAttention)和數據(如 FineWeb-Edu 數據集)的改進,他們做到了可以在單個 8XH100 節點上以 672 美元的價格在 24 小時內重現這個模型。
「這是非常不可思議的」,Andrej Karpathy 說道。不過,這其中也有一些註意事項和挑戰——llm.c 仍未得到完美調整和充分穩定(我們仍時不時會看到 loss 峰值和不良啟用範圍),而且評估也不夠全面(例如,沒有仔細評估多語言、程式碼和數學)。
復現準備工作
Andrej Karpathy 分享道,使用 llm.c 訓練 GPT-2 非常簡單,因為它是用 C/CUDA 編寫的,所以不需要 minconda、Python、PyTorch 等軟體。
你只需要一個 8XH100 GPU。
不過,llm.c 的計算方式很靈活——如果你只有 1 個 GPU,你仍然可以獲得 GPT-2,只是需要等待 8 天,而不是 1 天。如果你有 16 個 GPU(例如使用新的 Lambda 1 Click Clusters),你就可以進行多節點訓練,只需等待 12 個小時。
啟動節點後,以下是訓練 GPT-2 的完整說明(從空白框到開始執行只需約 1 分鐘的時間):
# install cudnn so we can use FlashAttention and run fast (optional)
# https://developer.nvidia.com/cudnn-downloads
# for me, CUDA 12 (run `nvcc --version`) running on Linux x86_64 Ubuntu 22.04
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
sudo apt-get -y install libcudnn9-dev-cuda-12
# "install" cudnn-frontend to ~/
git clone https://github.com/NVIDIA/cudnn-frontend.git
# install MPI (optional, if you intend to use multiple GPUs)
# (you might also have to install NVIDIA NCCL if it doesn't come with your setup)
sudo apt -y install openmpi-bin openmpi-doc libopenmpi-dev
# download and enter llm.c repo
git clone https://github.com/karpathy/llm.c.git
cd llm.c
# download the "starter pack" (~1GB download)
# contains GPT2-124M weights (used in tests), tokenizer, eval data .bin s
./dev/download_starter_pack.sh
# download the training dataset (FineWeb-Edu 100B token) .bin data shards
# note: this is a total of 1001 data shards. If you only want to test things
# out and don't want to do an actual run, feel free to append the number of
# training shards to download (e.g. for just 10 shards: ./edu_fineweb.sh 10)
# the full dataset is ~200GB, we can store it here in dev/data directory.
cd dev/data
./edu_fineweb.sh
# compile (~1 min 1st time for cuDNN mostly, few sec from then on)
cd ../../
make train_gpt2cu USE_CUDNN=1
# and train! (wait 24 hours here)
mpirun -np 8 ./train_gpt2cu \
-i "dev/data/edu_fineweb100B/edu_fineweb_train_*.bin" \
-j "dev/data/edu_fineweb100B/edu_fineweb_val_*.bin" \
-o "log_gpt2_1558M" \
-v 250 -s 300000 -g 384 \
-h 1 \
-b 16 -t 1024 \
-d 1048576 \
-r 0 \
-z 1 \
-c 0.1 \
-k "cosine" \
-l 0.0006 \
-q 0.1 \
-u 700 \
-n 2000 \
-x 32000 \
-ge 1 \
-y 1 \
-e "d48"
接下來,你將看到一堆打印捲動,然後最佳化將開始:
num_parameters: 1557686400 => bytes: 3115372800
allocated 2971 MiB for model parameters
batch_size B=16 * seq_len T=1024 * num_processes=8 and total_batch_size=1048576
=> setting grad_accum_steps=8
created directory: log_gpt2_1558M
allocating 40409 MiB for activations
val loss 11.129390
allocating 2971 MiB for parameter gradients
allocating 742 MiB for AdamW optimizer state m
allocating 742 MiB for AdamW optimizer state v
allocating 742 MiB for master copy of params
step 1/32000 | loss 11.133732 (+nanz)| norm 52.9732 (+nanz)| lr 8.57e-07 | 3056.36 ms | 42.6% bf16 MFU | 343080 tok/s
step 2/32000 | loss 10.539388 (+nanz)| norm 43.5996 (+nanz)| lr 1.71e-06 | 2747.19 ms | 47.4% bf16 MFU | 381690 tok/s
step 3/32000 | loss 9.894109 (+nanz)| norm 23.2229 (+nanz)| lr 2.57e-06 | 2753.25 ms | 47.3% bf16 MFU | 381259 tok/s
step 4/32000 | loss 9.566241 (+nanz)| norm 28.4920 (+nanz)| lr 3.43e-06 | 2741.47 ms | 47.5% bf16 MFU | 381690 tok/s
step 5/32000 | loss 9.482848 (+nanz)| norm 23.7817 (+nanz)| lr 4.29e-06 | 2752.07 ms | 47.3% bf16 MFU | 381507 tok/s
step 6/32000 | loss 9.332832 (+nanz)| norm 15.9113 (+nanz)| lr 5.14e-06 | 2751.01 ms | 47.3% bf16 MFU | 381431 tok/s
step 7/32000 | loss 9.165650 (+nanz)| norm 10.5941 (+nanz)| lr 6.00e-06 | 2753.03 ms | 47.3% bf16 MFU | 381327 tok/s
step 8/32000 | loss 9.132234 (+nanz)| norm 16.2733 (+nanz)| lr 6.86e-06 | 2748.91 ms | 47.3% bf16 MFU | 381348 tok/s
step 9/32000 | loss 9.097384 (+nanz)| norm 12.1342 (+nanz)| lr 7.71e-06 | 2748.73 ms | 47.3% bf16 MFU | 381367 tok/s
step 10/32000 | loss 9.072879 (+nanz)| norm 10.5923 (+nanz)| lr 8.57e-06 | 2749.40 ms | 47.3% bf16 MFU | 381369 tok/s
...
可以看到,每一步驟的時間約為 2.75 秒,一共有 32000 個步驟,所以現在我們要等待約 24 小時。
在每一步驟中,訓練執行都會從 FineWeb-EDU (這些都是互聯網上的教育網頁)中抽取約 100 萬個 token,並更新模型的 1.558 億個權重,以便更好地預測序列中的下一個 token。
最後,總共處理了 32,000 * 1048576 = 336 億個 token。隨著能更好地預測下一個 token,loss 也會隨之減少。常模將穩定在 0.1-1 左右,學習率在前幾步中得到了預熱。所以,這裏的模型單元利用率(MFU)約為 50%,即相當高效。
現在等待 24 小時後,可以使用 dev/vislog.ipynb jupyter notebook 檢視 main.log 日誌檔。為此,你還需要安裝 Python 和 matplotlib。
驗證與評估
根據上圖所示,左邊追蹤的是 FineWeb-EDU 驗證數據的 loss。如果只執行 OpenAI 釋出的 GPT-2 並評估其在這一數據上的 loss,就會得到紅色水平線(loss 為 2.83)。
對比之下, Andrej Karpathy 模型 的執行速度很快就超過了它,步長約為 5,000。
不過, Andrej Karpath 坦言, 這種比較並不公平,因為 GPT-2 是在從未釋出的 WebText 數據集上訓練的,因此可能存在較大的分布偏移。因此,舉例來說,如果以 LR 1e-4 對 OpenAI 模型進行 1000 步的微調,loss 會迅速下降到藍線(損失為 2.61),因為它正在快速適應新的數據統計。
「我喜歡把驗證 loss 看成是理智的檢查,但實際比較時,我們還是要看固定的第三方評估結果。HellaSwag 評估是一種表現良好、平穩、常見、經常被參照的評估,它還能提供早期訊號。這些都是簡單的常識性場景,模型必須選擇正確的延續」,Andrej Karpath寫道。
在右側窗格中對 HellaSwag 進行評估,可以看到 llm.c 模型在大約 25K 步左右超越了 GPT-2 模型(早於 GPT-2,據估計 GPT-2 是在 ~100B 個詞組上訓練出來的。這可能與數據品質的提高有關,Andrej Karpath 稱,在之前的 124M 執行中也觀察到了這一點)。
綠線是相同規模的 GPT-3 模型,它的模型架構與 GPT-2 基本相同,只是略有不同(上下文長度為 1024 -> 2048),但訓練了 3 億個 token(即比我們在這裏訓練的 token 多 10 倍)。
Andrej Karpath 表示,「我想說的是,即使是 HellaSwag 也不是一個理想的單點比較選項,因為它測試的是簡單的英語和常識,而不是多語言、數學或程式碼。可能是 WebText 數據集在這些方面的權重較大,而這些領域在某種程度上"竊取"了模型的能力,我們不得而知,因為它從未釋出過。最後,一般來說,在 GPT-2 這樣的低模型能力下,好的評估結果更難,因為模型不理解多項選擇,而且它們的樣本品質不夠高,無法在標準數學或程式碼 evals 中取得高於偶然性的效果。」
參數指南
讓我們來詳細了解一下現在傳入訓練的參數。OpenAI 釋出的 GPT-2 包含模型權重,但細節很少;而 GPT-3 沒有權重,但細節很多。因此,在很多情況下, Andrej Karpath 采用 GPT-3 論文中的超參數,因為 GPT-2 論文中的資訊非常非常少:
mpirun -np 8 ./train_gpt2cu (啟動命令:使用 mpi 啟動 8 個行程,每個行程在 1 個 GPU 上執行訓練,在這個 8XH100 節點上共有 8 個 GPU)。如果有 4 個 GPU,請使用 -np 4。如果只有 1 個 GPU,則可以跳過 mpi,即只需將其更改為 ./train_gpt2cu。
-i -j 是訓練和驗證分割標記檔,透過 edu_fineweb.sh 下載
-o 是將日誌和檢查點寫入的輸出目錄
-v 250 要求每 250 步評估並記錄驗證loss
-s 300000 要求每 300000 步采樣一些 token。由於總步數將小於此值,因此這是一種關閉采樣的簡便方法,只會在最後采樣一次。
-g 384 設定最後采樣的標記數為 384
-h 1 要求評估 HellaSwag 的準確性
-b 16 將微批大小設定為 16。如果記憶體不足,可以減小該值,例如嘗試 8、4、2,直至 1。
-t 1024 將最大序列長度設定為 1024,與 GPT-2 相同。
-d 1048576 按照 GPT-3 的超參數列,要求總批次大小為 20 的 2 次方。程式碼將確保滿足所需的總批次大小,並計算最佳化 "內迴圈 "步驟所需的梯度累積。例如,在上面我們看到有 8 個 GPU,每個 GPU 處理 16 X 1024 個代幣,那麽每個微步(單次前進後退)就是 8 X 16 X 1024 = 131,072 個代幣,因此程式碼計算出梯度累積步驟為 8,以滿足每步所需的 100 萬批次大小,即前進+後退 8 次,然後單次更新。
-r 0 設定重新計算為零。重新計算是一種權衡計算和記憶體的方法。如果 -r 為 1,那麽我們將在後向過程中重新計算前向過程的一部份(GeLU)。這意味著我們不必緩存它,從而節省了記憶體,但代價是需要更多的計算量。因此,如果記憶體不足,可以試試 -r 1 或 -r 2(也會重新計算布局)。
-z 1 在多個 GPU 上開啟 ZeRO-1(即最佳化器狀態分片)。如果訓練使用的 GPU 超過 1 個,則無需考慮此設定,基本上應始終開啟。在使用 1 個 GPU 的情況下,此設定為無效。
-c 0.1 將權重衰減設定為 0.1。只有(2D)權重的衰減與 GPT-2 完全相同,這個數位來自 GPT-3 論文。
-k "余弦"設定余弦學習率計劃,這是預設設定。
-l 0.0006 將最大學習率設定為 6e-4。GPT-3 的論文中說該模型大小應使用 2e-4,但在這裏使用了三倍的學習率,似乎訓練速度更快,而且沒有任何問題。這還沒有經過仔細調整。
-Q 0.1 表示在訓練過程中,將把學習率衰減到最大 LR 的 10%,這與 GPT-3 論文一致。
-u 700 表示將在前 700 次叠代中將學習率從 0 提升到最大學習率,按照 GPT-3 論文的要求,在總批次大小為 0.5M 時,學習率為 3.5 億個 token。
-n 2000 要求每 2000 步保存模型檢查點。
-x 32000 要求總步數為 32K 步。之所以選擇這個數位,是因為它是一個很好的數位,而且正好適合 24 小時。
-ge 1 為 CublasLt 設定一個新近合並的 gelu 重新計算設定(可選)
-y 1 設定"恢復"標誌。如果你的訓練因故崩潰或掛起,你可以 CTRL+C 並重新執行這條命令,它會嘗試恢復最佳化。llm.c 是 bit 確定的,所以你會得到與沒有崩潰時相同的結果。
-e "d48" 要求從頭初始化一個深度為 48 的 GPT-2 模型。
記憶體指南
大多數人可能面臨的最大限制是他們的 GPU 沒有 80GB 的記憶體。
Andrej Karpath 表示,「 沒關系,如果你有耐心,仍然可以執行上述所有內容,只是速度會變慢。所以,如果模型不適合,你可以調整什麽呢?最重要的是調整微批次大小 -b。 嘗試減小它,但要保持整齊的數位。例如,從 16 到 8,再到 4,2,1。
在此基礎上,還可以嘗試調整重計算設定 -r,值為 0(最快,記憶體占用大)、1(稍微慢一點,但節省大量記憶體)或 2(稍微慢一點,節省較少記憶體)。
接下來可以做的是禁用 fp32 中的主權重,使用 -w 0(預設值為1)可以做到這一點。」
Karpath 稱,他們不會維護 fp32 的參數副本。在之前的幾次執行中,經驗表明這樣做是可以的,可能是由於他們使用了隨機舍入。如果即便這樣也不合適,你可以嘗試降低最大序列長度 -t,預設值為1024,可以降到512,256等,但這會使你的模型變得更糟,因為你降低了它的最大註意範圍。
程式碼
「毫無疑問,我可能有偏見,但 llm.c 確實很優雅」, Karpathy 表示 :
它執行只需要基本的 CUDA 依賴項。
它是一個直接、簡潔且可讀的C/CUDA實作。llm.c總共約有5000行C/CUDA程式碼。我們盡量使用C而不是C++,以保持簡單。神經網路訓練只是一個while迴圈,執行相同的、簡單的算術運算(比如+、-、*、/)在一個浮點陣列上,實際上不應該那麽復雜。
它編譯和執行非常快(幾秒鐘),所以你會花更多時間在偵錯上,減少等待時間。
它在開始時一次性分配所有的GPU記憶體,從那以後在訓練過程中記憶體占用保持完全不變。所以一旦你開始訓練,你就知道在整個執行過程中不會出現記憶體不足的問題。
它是 bit 級確定性的。
它的效率很高,接近~50%的最大浮點數運算利用率(MFU)。
主要入口點和大部份程式碼在檔train_gpt2.cu中。該檔包含GPT-2模型定義和訓練迴圈,大約有2000行程式碼,並從llmc目錄中匯入了許多包含各種工具和各層實作的輔助檔。cloc llmc報告有23個檔,共3170行程式碼,而cloc train_gpt2.cu目前有1353行程式碼。
多節點訓練
如果你屬於擁有大量 GPU 的上層階級,llm.c 支持多節點訓練。
Karpathy 分享道,其 個人目前做過的最大規模訓練是在 Lambda 的全新一鍵集群功能上,用 2 個節點的 16XH100 GPU 進行的。這是「失業的壞處之一」,畢竟沒有錢了。
同時,他還說道,Lambda 團隊提供了詳細的說明,教你如何在他們的一鍵集群上訓練 llm.c模型。例如,使用 512 個 GPU 的 H100 集群,每小時費用為2,300 美元,你可能在大約30分鐘內訓練好GPT-2。你需要增加總批次大小(例如到約800萬),可能還需要稍微調整超參數。不過, Karpathy自己 沒有嘗試過,但其表示,「它可能可行,而且會非常酷」。
PyTorch 比較
Karpathy 認為,使用其並列 PyTorch 實作,在 PyTorch 中進行相對可比的執行應該是這樣的:
torchrun --standalone --nproc_per_node=8 train_gpt2.py \
--input_bin "dev/data/edu_fineweb100B/edu_fineweb_train_*.bin" \
--input_val_bin "dev/data/edu_fineweb100B/edu_fineweb_val_*.bin" \
--write_tensors 0 \
--model d48 \
--batch_size 8 --sequence_length 1024 --total_batch_size 1048576 \
--dtype bfloat16 \
--compile 1 \
--tensorcores 1 \
--flash 1 \
--num_iterations 32000 \
--warmup_iters 700 \
--weight_decay 0.1 \
--overfit_single_batch 0 \
--learning_rate 0.0006 \
--zero_stage 1
PyTorch 程式碼僅供測試參考,而非實際實作,因此訓練迴圈在某些地方略有不同(例如,數據載入器不會對分片進行置換等),但這仍可能作為參考點有用。他還將預設詞匯大小修改為 50257 -> 50304 以提高效率,然後當前的 PyTorch 夜間版本給出:
step 16/32000 | train loss 8.903997 | norm 8.3474 | lr 1.37e-05 | (3381.88 ms | 310057 tok/s)
step 17/32000 | train loss 8.870140 | norm 3.7936 | lr 1.46e-05 | (3381.95 ms | 310051 tok/s)
step 18/32000 | train loss 8.875732 | norm 9.4993 | lr 1.54e-05 | (3393.09 ms | 309033 tok/s)
step 19/32000 | train loss 8.817432 | norm 2.8345 | lr 1.63e-05 | (3379.75 ms | 310253 tok/s)
step 20/32000 | train loss 8.798056 | norm 4.1234 | lr 1.71e-05 | (3386.53 ms | 309631 tok/s)
step 21/32000 | train loss 8.777574 | norm 2.8010 | lr 1.80e-05 | (3386.05 ms | 309675 tok/s)
...
現在,Andrej Karpathy表示,「不能說我完全有信心 PyTorch 指令碼已得到最大程度的調整,但可以進行以下觀察」。
PyTorch 似乎占用了更多記憶體(此次執行約為 80GB),而 llm.c 占用了 57GB(提高了 29%)。記憶體很重要,因為它允許你增加批次處理大小(例如,llm.c 在此處可以增加到 24 個微批次處理),這樣速度會更快一些。
其次,pytorch 每次叠代大約為 3386 毫秒,而 llm.c 則為 2750 毫秒,因此 llm.c 的速度提高了約 19%。一些效能提升的原因是已知的,例如 llm.c 包含了像啟動反向傳播的 Fused classifier 之類的最佳化,而 Andrej Karpathy 透露 ,torch.compile 目前並未實作這一點。但也有可能這個指令碼尚未完全調優,不過無論如何,Andrej Karpathy 展示這個對比是為了:
1) 讓其他人可以檢視、試用、比較和幫助調優,
2) 表明llm.c在GPT-2/3訓練的特定情況下已經相當最佳化和快速。
最終模型
main.log 檔(http://llmc.s3-us-west-2.amazonaws.com/gpt2_1558M/main.log)。
model_00032000.bin llm.c bin 模型檔(http://llmc.s3-us-west-2.amazonaws.com/gpt2_1558M/model_00032000.bin)
轉換為 huggingface transformers GPT-2 模型的模型,已上傳到了這裏:karpathy/gpt2_1558M_final2_hf(https://huggingface.co/karpathy/gpt2_1558M_final2_hf)。
現在還添加了一個經過 100k (https://huggingface.co/karpathy/gpt2_1558M_final3_hf)步訓練的模型版本,該模型的 HellaSwag 值為 57.7,而經過 330K(https://huggingface.co/karpathy/gpt2_1558M_final4_hf)步訓練的模型的 HellaSwag 值為 62.7。
模型匯出
例如,模型匯出可按如下方式進行:
python dev/eval/export_hf.py --input log_gpt2_128M/model_00032000.bin --output gpt2_1558M_export
然後,你就可以執行 Eleuther 評估工具,或者執行 huggingface 采樣管道來獲取模型樣本:
# take model for spin
import torch
output = "./gpt2_1558M_final2_hf"
# set pytorch seeds
torch.manual_seed(42)
torch.cuda.manual_seed(42)
prompt = "In a shocking finding, scientist discovered a herd of unicorns living in a remote, previously unexplored valley, in the Andes Mountains. Even more surprising to the researchers was the fact that the unicorns spoke perfect English."
from transformers import AutoModelForCausalLM, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(output)
model = AutoModelForCausalLM.from_pretrained(output, attn_implementation="flash_attention_2", torch_dtype=torch.bfloat16, device_map='cuda')
model.eval()
tokens = tokenizer.encode(prompt, return_tensors="pt")
tokens = tokens.to('cuda')
output = model.generate(tokens, max_new_tokens=500, pad_token_id=tokenizer.eos_token_id, do_sample=True, top_k=50, num_return_sequences=4)
samples = tokenizer.batch_decode(output)
for sample in samples:
print('-'*30)
print(sample)
400B token 執行
除此之外,Andrej Karpathy 還嘗試用遠超 33B token 的規模來訓練 GPT-2。具體而言,他將 -x 改為 400,000,以訓練 420B token(規模甚至比使用 300B 訓練的 GPT-3 模型還要大)。
這個模型在執行到第 330,000 步驟之前一直很好:
該模型在 HellaSwag 上大大超越了同等大小的 GPT-2 和 GPT-3(最高可達約 61%),但遺憾的是,從那時起它就變得不穩定並出現了問題。
在這個過程中,有更多較小的峰值,但 Karpathy 將程式碼配置改為當檢測到瞬時不穩定時跳過更新(其中使用了 -sl 5.0 -sg 5.0 標記), 這有助於緩解和推遲問題。
對此, Karpathy 認為其對初始化、啟用範圍和整體模型訓練穩定性還不夠謹慎,並且存在更深層次的問題,這些問題會逐漸使模型陷入不穩定狀態,尤其是對於較大的模型和長時間的訓練。這也是他們未來想要進一步研究和探討的地方。
以上,便是 Karpathy 此次實踐的整個經過。
人工智慧訓練不會越來越便宜
不過,也有人認為 硬體、軟體和訓練數據的進步並不意味著尖端的 AI 訓練會越來越便宜。
Anthropic 公司執行長 Dario Amodei 表示,目前正在訓練的人工智慧模型已經耗資 10 億美元,而更昂貴的模型在 2025 年就會達到 1000 億美元。
這是因為雖然硬體效能越來越強大,但價格也越來越昂貴。例如,NVIDIA H100 目前每台售價 4 萬美元。盡管如此,下一代 Blackwell AI 芯片的售價預計將達到 7 萬美元,除非我們能找到像 Sohu AI 芯片(專為變壓器設計的 ASIC)這樣的硬體突破,否則一個完整的伺服器機架的售價將達到 300 萬美元甚至更高。
除了成本方面的影響,AI 數據中心日益增長的電力需求也開始引起一些專家的關註。僅一塊 H100 芯片,以平均 61% 的年利用率執行,每年就會消耗 3.7 百萬瓦時的電力。僅以平均 61% 的年利用率執行的一個 H100 芯片每年就要消耗 3.7 百萬瓦時的電力。去年,Nvidia 和其他所有參與者共售出超過 380 萬台 AI GPU,相當於每年 14.3 TWh 的電力,足以為 130 萬個普通美國家庭供電。
但即使投入大量資金和精力在 AI 上,谷歌 DeepMind 執行長表示,目前的模型仍然只處於貓的智商水平。因此,我們仍然需要為未來的模型再投資數十億美元。但是,如果你想嘗試使用舊模型構建自己的 LLM,透過 Karpathy的方法,只要幾百美元就夠了。
來源:
https://github.com/karpathy/llm.c/discussions/677
https://www.tomshardware.com/tech-industry/artificial-intelligence/former-tesla-ai-director-reproduces-gpt-2-in-24-hours-for-only-672
推薦閱讀:
炎炎夏日🔥,程式人生送清涼福利!
掃碼回復「 抽獎 」即有機會獲得時尚 T 恤、精選圖書和大會精品 PPT 等好禮~