在 AI 的浪潮下,GPU 可以說是一間公司的算力的體現,但是 GPU 到底是什麼?為什麼他對 AI 的發展這麼重要呢?所以這篇文章我們就來介紹一下,到底什麼是 GPU 吧!
所謂的 GPU,全稱是 Graphics Processing Unit,中文翻譯為「圖形處理器」,所以顧名思義,其實 GPU 最一開始的用途,就是拿來「處理影像圖形」用的。 只不過因為 GPU 的「平行處理」的特性實在太好用,所以後來才被拿來挖礦、甚至發展 AI。
所以在了解 GPU 為什麼對 AI 很重要之前,首先一定要先了解 GPU 的用途為何,了解 GPU 是怎麼做到「平行處理」的概念的,才能夠了解為什麼 GPU 對於 AI 的發展這麼重要。
其實 GPU 最一開始的用途就是拿來「處理圖形」的,而在了解 GPU 的用途之前,我們必須要先了解一下目前電腦螢幕裡面是如何構成的,才能知道 GPU 的用途為何。
舉例來說,在每一台電腦螢幕中,其實都是由好幾個微小的像素(pixel)所組成,而每一個像素你可以想像成就是一個小格子。
所以像是現在主打的 4K 螢幕(3840×2160),就是指這台螢幕的長度有 3840 個像素,而高度則是有 2160 個像素,因此在整台螢幕上面,就是有 3840 x 2160 = 829 萬個像素(pixel)存在。
所以我們平常在使用螢幕時,不管是觀看 YouTube 影片、寫程式、打遊戲…等等,電腦就要分別計算「每一格 pixel 當前應該要呈現什麼顏色」,而當所有的 pixel 都計算好自己應該長什麼顏色之後,最終就會呈現一張完整的圖片了。
如果大家有生成過點陣圖、或是有玩過 Minecraft 的話,其實就是背後用的就是「像素」的概念,像是下圖就是一個 pixel 實際呈現的結果,當每一格 pixel 都計算出他的顏色之後,最終呈現給我們人眼看的結果,就是最右邊的「寶劍」了!
所以在影像處理的世界中,「每一格 pixel 都是獨立的,自己控制自己要呈現什麼顏色」,而當這些 pixel 們計算好自己要呈現什麼顏色之後,最終合成再整個合在一起看,就是對我們人類有意義的圖片了~
所以其實對於 pixel 而言,他其實根本不知道現在是要呈現什麼圖片😂,他的任務就是乖乖計算自己要什麼顏色,剩下的怎麼解讀就交給人類自己去判定。
所以透過上面的介紹,現在我們知道「一張圖片之所以能夠呈現出來,靠的就是 pixel 們自己在背後默默的運算」,而這其實就是 GPU 被發明出來的契機!
在 GPU 還沒被發明出來之前,如果我們用傳統 CPU 的去計算 pixel 的值的話,那就是得寫個 for loop,然後每一次 loop 就去計算每一格 pixel 的值。
圖片來源: 【OpenGL 篇】为什么游戏总要编译着色器?
但是使用 CPU 這樣子 for loop 一格一格計算實在是太慢了,所以為了加快計算的過程,GPU 就被發明出來了!!
在 GPU 裡面,有超超超超超級多個核心存在,每一個核心都可以執行一個簡單的計算,所以對於 GPU 而言,他就可以為每一個 pixel 都分配一個核心,然後 「在同一時間,所有核心都去計算他所分配到的 pixel 的值」,所以 GPU 就可以一口氣計算出所有 pixel 的顏色,因此就可以得到最終的結果了。
圖片來源: 【OpenGL 篇】为什么游戏总要编译着色器?
所以 GPU 之所以強大的地方,就在於「平行處理」,每一個 GPU 核心都有強大計算的能力,只要你給告訴他要計算的是哪一格 pixel、以及要處理的數據有哪些,GPU 就可以為那一格 pixel 分配一個核心,專門去計算這個 pixel 的最終顏色,又因為 GPU 中的核心數量非常多,因此就可以達到「同時計算所有 pixel」的效果了~
所以對於 GPU 來說,「平行處理」就是他的最強大的武器,而這也是 GPU 為什麼會在 AI 世界大放異彩的特質!
首先在 AI 時代中,所有的模型都是「訓練」出來的,而在訓練模型的過程中,使用 GPU 的「平行處理」就可以加快訓練的過程。
「訓練」的概念有點像是在教導小孩子一樣,每一個模型一開始都是一個天真無邪的孩子,並且每個孩子的特長和天賦都不同,而我們工程師所做的,就是拿著「同樣的對話範例」去給這個孩子看,試試看這個孩子最終會長成什麼樣子。
像是你可以拿下面這兩段對話,去訓練 X 模型,所以這時候 X 模型就會去「旁觀」這兩段對話,並且自己去理解這段對話(就像是小時候我們看著父母的言行一樣,就是從旁觀中去學習,所以身教大於言教啊!)。
A:你好
B:哈囉你好,你吃飽了沒?
A:你好
B:心情不好,滾
而當你使用上面這兩段對話「訓練」完 X 模型之後,這時候當你跟 X 模型說「你好」時,他可能會回你:
你:你好
X 模型:滾
或是
你:你好
X 模型:哈囉滾
因此在「訓練」模型的過程中,其實我們作為工程師,也是不知道 X 模型最終到底會回覆什麼的,一定得等到訓練完成之後,我們才能夠透過一問一答的測試的方式,去檢查 X 模型的回覆是否如我們預期。
所以在 AI 的時代中,所有的模型其實都是通過「訓練」出來的,並且上面這種給 X 模型參考旁觀對話的過程,也稱為「訓練模型」。
而 GPU 之所以在 AI 的發展中很重要,就是因為 「使用 GPU 的平行處理,就可以加快訓練的過程」。
舉例來說,如果我們使用傳統 CPU 來訓練 X 模型的話,那就像是教育小孩一樣,一次只能夠教導一個科目,等到這個科目完成之後,才教導下一個科目。
而如果我們使用 GPU 來訓練 X 模型的話,那就像是教育一個超級天才一樣,你可以一口氣教超級多科目,這個天才會用他的超級 GPU 腦袋,為每一個科目都分配一個核心,並且同時處理這些科目(就像前面的處理 pixel 一樣)。
所以只要我們使用了 GPU,就可以「大幅提升訓練模型的速度」,因此就可以快速將 X 模型訓練完畢,進而檢查他的訓練成果了。
這裡可能會有人有疑問,就是「為什麼提升訓練模型的速度這麼重要?」,就讓我緩緩道來我個人的訓練模型的經驗,跟大家分享一下我 train model 的血淚史….🥹(以下「訓練模型」會簡稱為 train model)。
以前我在唸研究所的時候有稍微旁聽過 Machine Learning 的課(機器學習,算類 AI 吧),那時候有個作業要自己去 train 一個 model 出來,我當時就是調調調參數,然後按下 Enter 鍵放下去讓他跑,接著我就沒事幹了只能苦苦等著他跑完🥹。
想當然第一次跑出來的結果一定是很爛,需要重 train,所以這時候我又只能重新調一下參數,然後再按下 Enter 鍵,重新用新參數去 train model,然後我就又只能再苦苦等一天….。
所以 train model 真的是會花很多時間都在空等….,就像是你寫了一段程式,然後要等一天後你才能 debug 一樣,只有煎熬可言(而且進度也會進展的很慢),所以這也是為什麼 GPU 真的很重要。
只要有一個好的 GPU,就可以讓 train model 的時間從 3 天降成 30 分鐘(是有點誇張的比喻,但大概是這個概念),同樣是 30 天的開發週期,有一個好 GPU 的工程師就是可以有比較多次 train model 的機會(也就是有比較多次失敗的機會),而爛 GPU 的工程師就只能試幾次而已,剩下時間都在空等而已。
所以這也是為什麼 GPU 對於 AI 發展這麼重要的原因,只要能夠盡可能的降低 train model 的空等時間,就可以 debug 更多次,技術也會發展得更快一點。
因此 GPU 的平行處理,可以說是加速 AI 發展的強大催化劑,有了 GPU 之後,原本需要 1 年才能進步的技術,可能縮短為 3 個月就能做到,所以 GPU 可以說是兵家必爭之地,擁有足夠的 GPU 資源,才能夠確保 AI 技術有能力往下發展。
所以最後做個總結的話,所謂的 GPU,他的全稱是 Graphics Processing Unit,中文翻譯為「圖形處理器」。
GPU 有一個強大的特性,就是「平行處理」,因此 GPU 就能夠藉由他內部的眾多核心,同時去處理許多的任務,加速程式的運行。
也因為 GPU 的平行處理的特性,因此 GPU 最一開始的用途,是拿來「處理影像」的,所以像是追求高畫質的遊戲玩家,就需要挑選好一點的 GPU,才能夠得到更好的畫質、更逼真的特效體驗。
而隨著 AI 浪潮的崛起,大家也發現 GPU 很適合用在「訓練模型」上面,只要透過 GPU 的平行處理的特性,就可以加速訓練模型的速度,因此研究人員就可以更快的知道當次訓練模型的結果,進而提早投入到下一次的訓練中了!
這篇文章介紹了 GPU 是什麼,並且也介紹了為什麼 GPU 對 AI 的發展很重要,希望可以透過這篇文章,幫助大家了解 GPU 的底層邏輯是什麼,也能大概了解為什麼 NVIDIA 是現在最火熱的公司了(因為他就是專門生產高階 GPU 的公司,大家要用高階 GPU 只能跟他買)。
如果你對後端技術有興趣的話,也歡迎免費訂閱 《古古的後端筆記》電子報 ,每週二為你送上一篇後端技術分享,那我們就下一篇文章見啦!