時間:2024-01-22 16:21:34來æºï¼šç®—力基建
它是如æ¤é‡è¦ï¼Œä»¥è‡³äºŽè°·æŒç›®å‰å› 涉嫌侵犯 BF16 çš„å‰µå»ºè€…è€Œè¢«èµ·è¨´ï¼Œç´¢è³ 16 億至 52 億美元。所有的目光都集ä¸åœ¨æ•¸å—æ ¼å¼ä¸Šï¼Œå› 為它們在éŽåŽ»åå¹´ä¸å°äººå·¥æ™ºèƒ½ç¡¬ä»¶æ•ˆçŽ‡çš„æå‡èµ·åˆ°äº†å¾ˆå¤§çš„ä½œç”¨ã€‚è¼ƒä½Žç²¾åº¦çš„æ•¸å—æ ¼å¼æœ‰åŠ©äºŽæŽ¨å€’æ•¸åå„„åƒæ•¸æ¨¡åž‹çš„å…§å˜å¢»ã€‚
在本文ä¸ï¼Œæˆ‘們將從基本原ç†çš„åŸºç¤Žä¸Šï¼Œå¾žæ•¸å—æ ¼å¼çš„基本原ç†åˆ°ç¥žç¶“網絡é‡åŒ–çš„ç•¶å‰æŠ€è¡“æ°´å¹³é€²è¡ŒæŠ€è¡“æŽ¢è¨Žã€‚æˆ‘å€‘å°‡ä»‹ç´¹æµ®é»žèˆ‡æ•´æ•¸ã€é›»è·¯è¨è¨ˆæ³¨æ„äº‹é …ã€å¡Šæµ®é»žã€MSFPã€å¾®ç¸®æ”¾æ ¼å¼ã€å°æ•¸ç³»çµ±ç‰ã€‚我們還將介紹推ç†çš„é‡åŒ–å’Œæ•¸å—æ ¼å¼çš„差異以åŠé«˜ç²¾åº¦èˆ‡ä½Žç²¾åº¦è¨“練方法。æ¤å¤–,我們將討論é¢è‡¨é‡åŒ–和準確性æå¤±ç›¸é—œæŒ‘戰的模型的下一æ¥ç™¼å±•。
上述都是è¨è¨ˆä¸€é¡†AI芯片需è¦è€ƒé‡çš„å› ç´ ã€‚
01. 矩陣乘法
任何ç¾ä»£æ©Ÿå™¨å¸ç¿’模型的大部分都是矩陣乘法。在GPT-3ä¸ï¼Œæ¯ä¸€å±¤éƒ½ä½¿ç”¨å¤§é‡çŸ©é™£ä¹˜æ³•:例如,其ä¸ä¸€å€‹å…·é«”é‹ç®—是(2048 x 12288)矩陣乘以(12288 x 49152)矩陣,輸出(2048 x 49152)矩陣。
é‡è¦çš„æ˜¯å¦‚何計算輸出矩陣ä¸çš„æ¯å€‹å–®ç¨å…ƒç´ ,這å¯ä»¥æ¸çµç‚ºå…©å€‹éžå¸¸å¤§çš„å‘é‡çš„é»žç© - 在上é¢çš„示例ä¸ï¼Œå¤§å°ç‚º 12288。這由 12288 次乘法和 12277 æ¬¡åŠ æ³•çµ„æˆï¼Œå®ƒå€‘ç´¯ç©æˆä¸€å€‹æ•¸å—– è¼¸å‡ºçŸ©é™£çš„å–®å€‹å…ƒç´ ã€‚
通常,這是通éŽå°‡ç´¯åР噍坄å˜å™¨åˆå§‹åŒ–為零,然åŽé‡å¾©åœ°åœ¨ç¡¬ä»¶ä¸å®Œæˆçš„
乘以 x_i * w_i;
å°‡å…¶æ·»åŠ åˆ°ç´¯åŠ å™¨ä¸ï¼›
æ¯å€‹å‘¨æœŸçš„åžåé‡å‡ç‚º 1。經éŽå¤§ç´„ 12288 個循環åŽï¼Œè¼¸å‡ºçŸ©é™£çš„å–®å€‹å…ƒç´ çš„ç´¯åŠ å®Œæˆã€‚這種“èžåˆä¹˜åŠ â€é‹ç®— (FMA:fused multiply-add) 是機器å¸ç¿’的基本計算單元:芯片上有數åƒå€‹ FMA 單元戰略性地排列以有效地é‡ç”¨æ•¸æ“šï¼Œå› æ¤å¯ä»¥å¹¶è¡Œè¨ˆç®—è¼¸å‡ºçŸ©é™£çš„è¨±å¤šå…ƒç´ ï¼Œä»¥æ¸›å°‘æ‰€éœ€çš„å‘¨æœŸæ•¸ã€‚
上圖ä¸çš„æ‰€æœ‰æ•¸å—都需è¦åœ¨èŠ¯ç‰‡å…§éƒ¨çš„æŸå€‹ä½ä»¥æŸç¨®æ–¹å¼ä»¥ä½è¡¨ç¤ºï¼š
x_i,輸入激活;
w_i,權é‡ï¼›
p_i,æˆå°ä¹˜ç©ï¼›
整個輸出完æˆç´¯åР之å‰çš„æ‰€æœ‰ä¸é–“éƒ¨åˆ†ç´¯åŠ å’Œï¼›
最終輸出總和;
在這個巨大的è¨è¨ˆç©ºé–“ä¸ï¼Œç•¶ä»Šå¤§å¤šæ•¸æ©Ÿå™¨å¸ç¿’é‡åŒ–ç ”ç©¶éƒ½å¯ä»¥æ¸çµç‚ºå…©å€‹ç›®æ¨™ï¼š
è¶³å¤ æº–ç¢ºåœ°å˜å„²æ•¸åƒå„„個權é‡ï¼ŒåŒæ™‚使用盡å¯èƒ½å°‘çš„ä½ï¼Œå¾žå®¹é‡å’Œå¸¶å¯¬çš„角度減少內å˜å ç”¨ã€‚é€™å–æ±ºäºŽç”¨äºŽå˜å„²æ¬Šé‡çš„æ•¸å—æ ¼å¼ã€‚
實ç¾è‰¯å¥½çš„能æºå’Œé¢ç©æ•ˆçŽ‡ã€‚é€™ä¸»è¦å–決于用于權é‡å’Œæ¿€æ´»çš„æ•¸å—æ ¼å¼ï¼›
這些目標有時是一致的,有時是ä¸ä¸€è‡´çš„â€”â€”æˆ‘å€‘å°‡æ·±å…¥ç ”ç©¶é€™å…©å€‹ç›®æ¨™ã€‚
02. æ•¸å—æ ¼å¼è¨è¨ˆç›®æ¨™ 1:芯片效率
許多機器å¸ç¿’èŠ¯ç‰‡è¨ˆç®—æ€§èƒ½çš„æ ¹æœ¬é™åˆ¶æ˜¯åŠŸè€—ã€‚é›–ç„¶ H100 ç†è«–上å¯ä»¥å¯¦ç¾ 2,000 TFLOPS 的計算能力,但在æ¤ä¹‹å‰å®ƒæœƒé‡åˆ°åŠŸçŽ‡é™åˆ¶ - å› æ¤æ¯ç„¦è€³èƒ½é‡çš„ FLOPs 是一個éžå¸¸éœ€è¦è·Ÿè¹¤çš„æŒ‡æ¨™ã€‚鑒于ç¾ä»£è¨“ç·´é‹è¡Œç¾åœ¨ç¶“å¸¸è¶…éŽ 1e25 次flopsï¼Œæˆ‘å€‘éœ€è¦æ¥µå…¶é«˜æ•ˆçš„èŠ¯ç‰‡ï¼Œåœ¨æ•¸æœˆå…§å¸æ”¶(sucking)兆瓦功率,æ‰èƒ½æ“Šæ•— SOTA。
03. åŸºæœ¬æ•¸å—æ ¼å¼
é¦–å…ˆï¼Œè®“æˆ‘å€‘æ·±å…¥äº†è§£è¨ˆç®—ä¸æœ€åŸºæœ¬çš„æ•¸å—æ ¼å¼ï¼šæ•´æ•¸ã€‚ 一ã€ä»¥ 2 ç‚ºåº•çš„æ£æ•´æ•¸æ£æ•´æ•¸å…·æœ‰æ˜Žé¡¯çš„以 2 為底的表示形å¼ã€‚這些稱為 UINT,å³ç„¡ç¬¦è™Ÿæ•´æ•¸ã€‚以下是 8 ä½ç„¡ç¬¦è™Ÿæ•´æ•¸ï¼ˆä¹Ÿç¨±ç‚º UINT8,范åœå¾ž 0 到 255)的一些示例。
這些整數å¯ä»¥æœ‰ä»»æ„使•¸ï¼Œä½†é€šå¸¸åƒ…支æŒä»¥ä¸‹å››ç¨®æ ¼å¼ï¼šUINT8ã€UINT16ã€UINT32 å’Œ UINT64。
二ã€è² 整數(Negative integers)
è² æ•´æ•¸éœ€è¦ä¸€å€‹ç¬¦è™Ÿä¾†å€åˆ†æ£è² 。我們å¯ä»¥å°‡ä¸€å€‹æŒ‡ç¤ºç¬¦æ”¾åœ¨æœ€é«˜æœ‰æ•ˆä½ä¸ï¼šä¾‹å¦‚0011 表示+3,1011 表示–3。這稱為符號-數值(sign-magnitude)表示。以下是 INT8 的一些示例,其范åœå¾ž –128 到 127。請注æ„ï¼Œç”±äºŽç¬¬ä¸€ä½æ˜¯ç¬¦è™Ÿï¼Œå› æ¤æœ€å¤§å€¼å¯¦éš›ä¸Šå·²å¾ž 255 減åŠåˆ° 127。 符號-æ•¸å€¼å¾ˆç›´è§€ï¼Œä½†æ•ˆçŽ‡å¾ˆä½Žâ€”â€”æ‚¨çš„é›»è·¯å¿…é ˆå¯¦ç¾æˆªç„¶ä¸åŒçš„åŠ æ³•å’Œæ¸›æ³•ç®—æ³•ï¼Œè€Œé€™äº›ç®—æ³•åˆä¸åŒäºŽæ²’有符號ä½çš„無符號整數的電路。有趣的是,硬件è¨è¨ˆäººå“¡å¯ä»¥é€šéŽä½¿ç”¨äºŒé€²åˆ¶è£œç¢¼è¡¨ç¤ºä¾†è§£æ±ºé€™å€‹å•題,這使得å¯ä»¥å°æ£æ•¸ã€è² 數和無符號數使用完全相åŒçš„進ä½åŠ æ³•å™¨é›»è·¯ã€‚æ‰€æœ‰ç¾ä»£ CPU都使用二進制補碼。 在 unsigned int8 ä¸ï¼Œæœ€å¤§æ•¸å— 255 是 11111111ã€‚å¦‚æžœæ·»åŠ æ•¸å— 1,255 會溢出到 00000000ï¼Œå³ 0。在signed int8 ä¸ï¼Œæœ€å°æ•¸å—是 -128ï¼Œæœ€å¤§æ•¸å—æ˜¯ 127。作為讓 INT8 å’Œ UINT8 共享硬件的技巧資æºï¼Œ-1å¯ä»¥ç”¨11111111表示。ç¾åœ¨ç•¶æ•¸å—åŠ 1時,它溢出到00000000ï¼ŒæŒ‰é æœŸè¡¨ç¤º0ã€‚åŒæ¨£ï¼Œ11111110 å¯ä»¥è¡¨ç¤ºç‚º-2。
溢出被用作一個功能ï¼å¯¦éš›ä¸Šï¼Œ0 到 127 è¢«æ˜ å°„ç‚ºæ£å¸¸å€¼ï¼Œ128 到 255 è¢«ç›´æŽ¥æ˜ å°„åˆ° -128 到 -1。
04. 固定點(Fixed Point)
為了更進一æ¥ï¼Œæˆ‘們å¯ä»¥åœ¨ç¾æœ‰ç¡¬ä»¶ä¸Šè¼•æ¾å‰µå»ºæ–°çš„æ•¸å—æ ¼å¼ï¼Œè€Œç„¡éœ€é€²è¡Œä¿®æ”¹ã€‚雖然這些都是整數,但您å¯ä»¥ç°¡å–®åœ°æƒ³è±¡å®ƒå€‘是其他æ±è¥¿çš„倿•¸ï¼ä¾‹å¦‚,0.025 åªæ˜¯åƒåˆ†ä¹‹ 25,它å¯ä»¥å˜å„²ç‚ºæ•´æ•¸ 25。ç¾åœ¨æˆ‘們åªéœ€è¦è¨˜ä½å…¶ä»–地方使用的所有數å—都是åƒåˆ†ä¹‹å¹¾ã€‚ æ–°çš„â€œæ•¸å—æ ¼å¼â€å¯ä»¥è¡¨ç¤ºå¾ž –0.128 到 0.127 çš„åƒåˆ†ä¹‹ä¸€çš„æ•¸å—,而沒有實際的é‚輯變化。完整的數å—ä»è¢«è¦–為整數,然åŽå°æ•¸é»žå›ºå®šåœ¨å³èµ·ç¬¬ä¸‰ä½ã€‚這種ç–略稱為定點( fixed point)。 更一般地說,這是一個有用的ç–略,我們將在本文ä¸å¤šæ¬¡å›žé¡§å®ƒ - 如果您想更改å¯ä»¥è¡¨ç¤ºçš„æ•¸å—范åœï¼Œè«‹åœ¨æŸè™•æ·»åŠ æ¯”ä¾‹å› å。(顯然,您å¯ä»¥ç”¨äºŒé€²åˆ¶ä¾†åŸ·è¡Œæ¤æ“作,但å進制更容易討論)。
05. 浮點(Floating Point)
但定點有一些缺點,特別是å°äºŽä¹˜æ³•。å‡è¨æ‚¨éœ€è¦è¨ˆç®—一è¬å„„乘以一è¬å„„分——尺寸上的巨大差異就是高*動態范åœ*的一個例å。那么 1012å’Œ 10-12éƒ½å¿…é ˆç”¨æˆ‘å€‘çš„æ•¸å—æ ¼å¼ä¾†è¡¨ç¤ºï¼Œæ‰€ä»¥å¾ˆå®¹æ˜“è¨ˆç®—å‡ºä½ éœ€è¦å¤šå°‘ä½ï¼šå¾ž 0 到 1 è¬å„„以è¬å„„分之一的增é‡è¨ˆæ•¸ï¼Œä½ éœ€è¦ 10^24 增é‡ï¼Œlog2(10^ 24) ~= 80 ä½ä¾†è¡¨ç¤ºå…·æœ‰æˆ‘們想è¦çš„精度級別的動態范åœã€‚ æ¯å€‹æ•¸å— 80 ä½é¡¯ç„¶æ˜¯ç›¸ç•¶æµªè²»çš„。您ä¸ä¸€å®šé—œå¿ƒçµ•å°ç²¾åº¦ï¼Œæ‚¨é—œå¿ƒç›¸å°ç²¾åº¦ã€‚å› æ¤ï¼Œç›¡ç®¡ä¸Šè¿°æ ¼å¼èƒ½å¤ 準確å€åˆ† 1 è¬å„„å’Œ 999,999,999,999.999999999999,但您通常ä¸éœ€è¦é€™æ¨£åšã€‚大多數時候,您關心的是相å°äºŽæ•¸å—大å°çš„誤差é‡ã€‚ é€™æ£æ˜¯ç§‘å¸è¨˜æ•¸æ³•所解決的å•題:在å‰é¢çš„示例ä¸ï¼Œæˆ‘們å¯ä»¥å°‡ä¸€è¬å„„寫為 1.00 * 10^12,將一è¬å„„寫為 1.00 * 10^-12,這樣的å˜å„²ç©ºé–“è¦å°‘得多。這更復雜,但å¯ä»¥è®“您在相åŒçš„上下文ä¸è¡¨ç¤ºæ¥µå¤§å’Œæ¥µå°çš„æ•¸å—,而無需擔心。 å› æ¤ï¼Œé™¤äº†ç¬¦è™Ÿå’Œå€¼ä¹‹å¤–,我們ç¾åœ¨é‚„有一個指數。IEEE 754-1985 標準化了行æ¥èŒƒåœå…§ä»¥äºŒé€²åˆ¶å˜å„²è©²æ•¸æ“šçš„æ–¹å¼ï¼Œè€Œç•¶æ™‚ä½¿ç”¨çš„æ ¼å¼ç•¥æœ‰ä¸åŒã€‚ä¸»è¦æœ‰è¶£çš„æ ¼å¼ï¼Œ32 使µ®é»žæ•¸ï¼ˆâ€œfloat32â€æˆ–“FP32â€ï¼‰å¯æè¿°ç‚º (1,8,23):1 個符號ä½ã€8 個指數ä½å’Œ 23 個尾數ä½ã€‚
符號ä½ç‚º0表示æ£ï¼Œ1è¡¨ç¤ºè² ï¼›
指數ä½è¢«è§£é‡‹ç‚ºç„¡ç¬¦è™Ÿæ•´æ•¸ eï¼Œå¹¶è¡¨ç¤ºæ¯”ä¾‹å› å 2 e-127,其值å¯ä»¥ä»‹äºŽ 2-126-å’Œ2127ä¹‹é–“ã€‚æ›´å¤šæŒ‡æ•¸ä½æ„味著更大的動態范åœï¼›
尾數ä½è¡¨ç¤ºå€¼ 1.ã€‚æ›´å¤šå°¾æ•¸ä½æ„味著更高的相å°ç²¾åº¦ï¼›
å…¶ä»–ä½å¯¬å·²æ¨™æº–化或事實上已采用,例如 FP16 (1,5,10) å’Œ BF16 (1,8,7)。çˆè«–的焦點是范åœèˆ‡ç²¾åº¦ã€‚
FP8(1,5,2 或 1,4,3)最近在 OCP æ¨™æº–ä¸æ¨™æº–化了一些é¡å¤–的怪癖,但目å‰é‚„沒有定論。許多人工智能硬件公å¸å·²ç¶“實ç¾äº†å…·æœ‰ç¨å¾®å„ªè¶Šçš„變體的芯片,這些變體與標準ä¸å…¼å®¹ã€‚
06. 硅效率(Silicon Efficiency)
å›žåˆ°ç¡¬ä»¶æ•ˆçŽ‡ï¼Œæ‰€ä½¿ç”¨çš„æ•¸å—æ ¼å¼å°ç¡…é¢ç©å’Œæ‰€éœ€åŠŸçŽ‡æœ‰å·¨å¤§å½±éŸ¿ã€‚
ä¸€ã€æ•´æ•¸ç¡…è¨è¨ˆé›»è·¯ï¼ˆInteger Silicon Design Circuit)
æ•´æ•¸åŠ æ³•å™¨æ˜¯æœ‰å²ä»¥ä¾†ç ”究最深入的硅è¨è¨ˆå•題之一。雖然實際的實ç¾è¦å¾©é›œå¾—å¤šï¼Œä½†è€ƒæ…®åŠ æ³•å™¨çš„ä¸€ç¨®æ–¹æ³•æ˜¯å°‡å®ƒå€‘æƒ³è±¡ç‚ºæ ¹æ“šéœ€è¦å°‡ 1 ä¸€ç›´ç›¸åŠ å¹¶ä¸€ç›´åŠ åˆ°ç¸½å’Œä¸Šï¼Œå› æ¤åœ¨æŸç¨®æ„義上,n ä½åŠ æ³•å™¨æ£åœ¨åšä¸€å®šé‡çš„工作到 n å°äºŽä¹˜æ³•,請回想一下å°å¸çš„長乘法。我們進行 n ä½ä¹˜ä»¥ 1 ä½çš„乘ç©ï¼Œç„¶åŽæœ€åŽå°‡æ‰€æœ‰çµæžœç›¸åŠ ã€‚åœ¨äºŒé€²åˆ¶ä¸ï¼Œä¹˜ä»¥ 1 使•¸å—很簡單(0 或 1)。這æ„味著 n ä½ä¹˜æ³•器本質上由 n ä½åŠ æ³•å™¨çš„ n 次é‡å¾©çµ„æˆï¼Œå› æ¤å·¥ä½œé‡èˆ‡ n^2 æˆæ£æ¯”。 雖然實際實ç¾å› é¢ç©ã€åŠŸçŽ‡å’Œé »çŽ‡é™åˆ¶è€Œæœ‰å¾ˆå¤§ä¸åŒï¼Œä½†é€šå¸¸ 1) ä¹˜æ³•å™¨æ¯”åŠ æ³•å™¨æ˜‚è²´å¾—å¤šï¼Œä½† 2) åœ¨ä½Žä½æ•¸ï¼ˆ8 ä½åŠä»¥ä¸‹ï¼‰æ™‚,FMA 的功耗和é¢ç©æˆæœ¬æ›´é«˜ä»¥åŠä¾†è‡ªåŠ æ³•å™¨çš„æ›´å¤šç›¸å°è²¢ç»((n 與 n^2 縮放).
äºŒã€æµ®é»žé›»è·¯(Floating Point Circuits)
æµ®é»žå–®ä½æœ‰å¾ˆå¤§ä¸åŒã€‚相å,乘ç©/乘法相å°ç°¡å–®ã€‚ 如果æ°å¥½æœ‰ä¸€å€‹è¼¸å…¥ç¬¦è™Ÿç‚ºè² ï¼Œå‰‡ç¬¦è™Ÿç‚ºè² ï¼Œå¦å‰‡ç‚ºæ£ã€‚ 指數是傳入指數的整數和。 尾數是傳入尾數的整數ç©ã€‚ 相比之下,總和相當復雜。 首先,計算指數差。(å‡è¨ exp1 至少與 exp2 一樣大 - 如果沒有,請在說明ä¸äº¤æ›å®ƒå€‘); 將尾數 2 å‘下移動 (exp1 - exp2),使其與尾數 1 å°é½Šï¼› 呿¯å€‹å°¾æ•¸æ·»åŠ éš±å¼å‰å°Ž 1ã€‚å¦‚æžœä¸€å€‹ç¬¦è™Ÿç‚ºè² ï¼Œå‰‡å°å°¾æ•¸ä¹‹ä¸€åŸ·è¡ŒäºŒé€²åˆ¶è£œç¢¼ï¼› å°‡å°¾æ•¸åŠ åœ¨ä¸€èµ·å½¢æˆè¼¸å‡ºå°¾æ•¸ï¼› å¦‚æžœç™¼ç”Ÿæº¢å‡ºï¼Œå‰‡çµæžœæŒ‡æ•¸åŠ 1,尾數下移; å¦‚æžœçµæžœç‚ºè² ,則將其轉æ›å›žç„¡ç¬¦è™Ÿå°¾æ•¸å¹¶å°‡è¼¸å‡ºç¬¦è™Ÿè¨ç½®ç‚ºè² ï¼› å°å°¾æ•¸é€²è¡Œæ¸ä¸€åŒ–,使其具有å‰å°Ž 1,然åŽåˆªé™¤éš±å¼å‰å°Ž 1ï¼› é©ç•¶èˆå…¥å°¾æ•¸ï¼ˆé€šå¸¸èˆå…¥åˆ°æœ€æŽ¥è¿‘çš„å¶æ•¸ï¼‰ï¼› 值得注æ„çš„æ˜¯ï¼Œæµ®é»žä¹˜æ³•çš„æˆæœ¬ç”šè‡³æ¯”整數乘法“更少â€ï¼Œå› 為尾數乘ç©ä¸çš„使•¸æ›´å°‘ï¼Œè€ŒæŒ‡æ•¸çš„åŠ æ³•å™¨æ¯”ä¹˜æ³•å™¨å°å¾—多,幾乎無關緊è¦ã€‚ é¡¯ç„¶ï¼Œé€™ä¹Ÿæ˜¯æ¥µå…¶ç°¡åŒ–çš„ï¼Œç‰¹åˆ¥æ˜¯æˆ‘å€‘æ²’æœ‰è¨Žè«–çš„éžæ£è¦å’Œ nan 處ç†å 用了大é‡çš„空間。但è¦é»žæ˜¯ï¼Œåœ¨ä½Žä½æ•¸æµ®é»žä¸ï¼Œä¹˜ç©å¾ˆä¾¿å®œï¼Œè€Œç´¯åŠ å‰‡å¾ˆæ˜‚è²´ã€‚
我們æåˆ°çš„æ‰€æœ‰éƒ¨åˆ†åœ¨é€™é‡Œéƒ½éžå¸¸æ˜Žé¡¯ - å°‡æŒ‡æ•¸ç›¸åŠ ï¼Œå°¾æ•¸çš„å¤§åž‹ä¹˜æ³•å™¨æ•¸çµ„ï¼Œæ ¹æ“šéœ€è¦ç§»å‹•å’Œå°é½Šäº‹ç‰©ï¼Œç„¶åŽæ¨™æº–化。(從技術上講,真æ£çš„“èžåˆâ€ï¼ˆâ€œfusedâ€ï¼‰ä¹˜åŠ æœ‰é»žä¸åŒï¼Œä½†æˆ‘們在這里çœç•¥äº†ã€‚)
該圖表說明了上述所有è¦é»žã€‚有很多æ±è¥¿éœ€è¦æ¶ˆåŒ–,但è¦é»žæ˜¯ INT8 x INT8 çš„ç´¯åŠ å’Œç´¯åŠ åˆ°å®šé»ž (FX) çš„æˆæœ¬æ˜¯æœ€ä¾¿å®œçš„,并且由乘法 (“mpyâ€) 主導,而使用浮點作為æ“ä½œæ•¸æˆ–ç´¯åŠ æ ¼å¼ï¼ˆé€šå¸¸åœ¨å¾ˆå¤§ç¨‹åº¦ä¸Šï¼‰ç”±ç´¯ç©æˆæœ¬ï¼ˆâ€œalignaddâ€+“normaccâ€ï¼‰ä¸»å°Žã€‚例如,通éŽä½¿ç”¨å¸¶æœ‰â€œå®šé»žâ€ç´¯åŠ å™¨çš„ FP8 æ“ä½œæ•¸è€Œä¸æ˜¯é€šå¸¸çš„ FP32,å¯ä»¥ç¯€çœå¤§é‡æˆæœ¬ã€‚ 總而言之,本文和其他論文è²ç¨± FP8 FMA 將比 INT8 FMA 多å 用 40-50% 的硅é¢ç©ï¼Œå¹¶ä¸”èƒ½æºæ¶ˆè€—åŒæ¨£æ›´é«˜æˆ–更差的說法一直。這是大多數專用 ML 推ç†èŠ¯ç‰‡ä½¿ç”¨ INT8 的主è¦åŽŸå› ã€‚
07. æ•¸å—æ ¼å¼è¨è¨ˆç›®æ¨™ 2:準確性
既然整數總是更便宜,為什么我們ä¸åˆ°è™•使用 INT8 å’Œ INT16 è€Œä¸æ˜¯ FP8 å’Œ FP16å‘¢ï¼Ÿé€™å–æ±ºäºŽé€™äº›æ ¼å¼èƒ½å¤ 如何準確地表示神經網絡ä¸å¯¦éš›é¡¯ç¤ºçš„æ•¸å—。 我們å¯ä»¥å°‡æ¯ç¨®æ•¸å—æ ¼å¼è¦–為一個查找表。例如,一個éžå¸¸æ„šè ¢çš„ 2 使•¸å—æ ¼å¼å¯èƒ½å¦‚下所示:
顯然,這組四個數å—å°ä»»ä½•äº‹æƒ…éƒ½æ²’æœ‰å¤šå¤§ç”¨è™•ï¼Œå› ç‚ºå®ƒç¼ºå°‘å¤ªå¤šæ•¸å— - äº‹å¯¦ä¸Šï¼Œæ ¹æœ¬æ²’æœ‰è² æ•¸ã€‚å¦‚æžœè¡¨ä¸ä¸å˜åœ¨ç¥žç¶“網絡ä¸çš„æ•¸å—,那么您所能åšçš„就是將其四èˆäº”入到最近的æ¢ç›®ï¼Œé€™æœƒçµ¦ç¥žç¶“網絡帶來一點誤差。 那么表ä¸ç†æƒ³çš„值集是多少?表的大å°å¯ä»¥æœ‰å¤šå°ï¼Ÿ 例如,如果神經網絡ä¸çš„大多數值都接近于零(實際上也是如æ¤ï¼‰ï¼Œæˆ‘å€‘å¸Œæœ›èƒ½å¤ æœ‰å¾ˆå¤šé€™äº›æ•¸å—æŽ¥è¿‘äºŽé›¶ï¼Œé€™æ¨£æˆ‘å€‘å°±å¯ä»¥é€šéŽçŠ§ç‰²æº–ç¢ºæ€§ä¾†ç²å¾—更高的準確性。哪里沒有。 在實è¸ä¸ï¼Œç¥žç¶“ç¶²çµ¡é€šå¸¸æ˜¯æ£æ…‹åˆ†å¸ƒæˆ–æ‹‰æ™®æ‹‰æ–¯åˆ†å¸ƒï¼Œæœ‰æ™‚æ ¹æ“šæ¨¡åž‹æž¶æ§‹çš„ç¢ºåˆ‡æ•¸å€¼ï¼Œå˜åœ¨å¤§é‡ç•°å¸¸å€¼ã€‚特別是,å°äºŽéžå¸¸å¤§çš„語言模型, å¾€å¾€æœƒå‡ºç¾æ¥µç«¯ç•°å¸¸å€¼ï¼Œé€™äº›ç•°å¸¸å€¼å¾ˆå°‘è¦‹ï¼Œä½†å°æ¨¡åž‹çš„功能很é‡è¦ã€‚
上圖顯示了 LLAMA 65B 部分權é‡ã€‚é€™çœ‹èµ·ä¾†å¾ˆåƒæ£æ…‹åˆ†å¸ƒã€‚如果將æ¤èˆ‡ FP8 å’Œ INT8 ä¸çš„æ•¸å—分布進行比較,很明顯浮點集ä¸åœ¨é‡è¦çš„地方 - æŽ¥è¿‘é›¶ã€‚é€™å°±æ˜¯æˆ‘å€‘ä½¿ç”¨å®ƒçš„åŽŸå› ï¼
ä¸éŽï¼Œå®ƒä»ç„¶èˆ‡çœŸå¯¦åˆ†å¸ƒä¸å¤ªåŒ¹é…â€”â€”æ¯æ¬¡æŒ‡æ•¸éžå¢žæ™‚,它ä»ç„¶æœ‰é»žå¤ªå°–了,但比 int8 好得多。 我們å¯ä»¥åšå¾—更好嗎?從é é–‹å§‹è¨è¨ˆæ ¼å¼çš„一種方法是最å°åŒ–å¹³å‡çµ•å°èª¤å·®â€”—èˆå…¥é€ æˆçš„平凿失é‡ã€‚
08. å°æ•¸ç³»çµ±ï¼ˆLog Number Systems)
例如, Nvidia在HotChips 上宣稱 Log Number System 是繼續擴展éŽåŽ» 8 使•¸å—æ ¼å¼çš„å¯èƒ½é€”å¾‘ã€‚ä½¿ç”¨å°æ•¸ç³»çµ±æ™‚,èˆå…¥èª¤å·®é€šå¸¸è¼ƒå°ï¼Œä½†å˜åœ¨è¨±å¤šå•é¡Œï¼ŒåŒ…æ‹¬æ¥µå…¶æ˜‚è²´çš„åŠ æ³•å™¨ã€‚
NF4 和變體 (AF4) 是 4 使 ¼å¼ï¼Œå‡è¨æ¬Šé‡éµå¾ªå®Œå…¨æ£æ…‹åˆ†å¸ƒï¼Œå‰‡ä½¿ç”¨ç²¾ç¢ºçš„æŸ¥æ‰¾è¡¨ä¾†æœ€å¤§é™åº¦åœ°æ¸›å°‘誤差。但這種方法在é¢ç©å’ŒåŠŸè€—æ–¹é¢éžå¸¸æ˜‚貴——ç¾åœ¨æ¯å€‹æ“ä½œéƒ½éœ€è¦æŸ¥æ‰¾å·¨å¤§çš„æ¢ç›®è¡¨ï¼Œé€™æ¯”ä»»ä½• INT/FP æ“作都è¦ç³Ÿç³•得多。 å˜åœ¨å¤šç¨®æ›¿ä»£æ ¼å¼ï¼špositsã€ELMAã€PAL ç‰ã€‚這些技術è²ç¨±åœ¨è¨ˆç®—效率或表示準確性方é¢å…·æœ‰å¤šç¨®å„ªå‹¢ï¼Œä½†å°šæœªé”到商æ¥ç›¸é—œè¦æ¨¡ã€‚也許其ä¸ä¹‹ä¸€ï¼Œæˆ–者尚未發表/發ç¾çš„一個,將具有 INT çš„æˆæœ¬å’Œ FP çš„è¡¨å¾æº–確性——一些人已經åšå‡ºäº†é€™æ¨£çš„è²æ˜Žï¼Œæˆ–者更好。 æˆ‘å€‘å€‹äººå° Lemurian Labs PAL æœ€æœ‰å¸Œæœ›ï¼Œä½†é—œäºŽå…¶æ•¸å—æ ¼å¼ï¼Œé‚„有很多信æ¯å°šæœªæŠ«éœ²ã€‚他們è²ç¨±å…¶ 16 ä½ç²¾åº¦å’ŒèŒƒåœæ¯” FP16 å’Œ BF16 æ›´å¥½ï¼ŒåŒæ™‚硬件也更便宜。
隨著我們繼續擴展到éŽåŽ»çš„ 8 使 ¼å¼ï¼ŒPAL4 é‚„è²ç¨±æ¯” HotChips 上的 Nvidia ç‰å°æ•¸ç³»çµ±æœ‰æ›´å¥½çš„分布。他們的紙é¢è²æ˜Žä»¤äººé©šå˜†ï¼Œä½†ç›®å‰é‚„沒有硬件實ç¾è©²æ ¼å¼ã€‚
09. å¡Šè™Ÿæ ¼å¼ï¼ˆBlock Number Formats)
ä¸€å€‹æœ‰è¶£çš„è§€å¯Ÿæ˜¯ï¼Œå…ƒç´ çš„å¤§å°å¹¾ä¹Žç¸½æ˜¯èˆ‡å¼µé‡ä¸é™„è¿‘çš„å…ƒç´ ç›¸ä¼¼ã€‚ç•¶å¼µé‡çš„å…ƒç´ æ¯”å¹³å¸¸å¤§å¾—å¤šæ™‚ï¼Œé™„è¿‘çš„å…ƒç´ æœ¬è³ªä¸Šå¹¶ä¸é‡è¦â€”—它們相å°å¤ªå°ï¼Œç„¡æ³•在點ç©ä¸çœ‹åˆ°ã€‚ 我們å¯ä»¥åˆ©ç”¨é€™ä¸€é»ž - 我們å¯ä»¥åœ¨å¤šå€‹å…ƒç´ ä¹‹é–“å…±äº«ä¸€å€‹æŒ‡æ•¸ï¼Œè€Œä¸æ˜¯å°æ¯å€‹æ•¸å—都使用浮點指數。這節çœäº†å¾ˆå¤šå¤§éƒ¨åˆ†å†—余的指數。 這種方法已經å˜åœ¨äº†ä¸€æ®µæ™‚é–“ - Nervana Flexpointã€Microsoft MSFP12ã€Nvidia VSQ - 直到 2023 å¹´ OCP çš„ Microscaling æ‰å‡ºç¾ã€‚ æ¤æ™‚,å˜åœ¨ä¸€æ•´å¥—å¯èƒ½çš„æ ¼å¼ï¼Œå…·æœ‰ä¸åŒçš„æ¬Šè¡¡ã€‚微軟試圖é‡åŒ–硬件的è¨è¨ˆç©ºé–“:
硬件供應商é¢è‡¨è‘—一個棘手的å•題,å³å˜—試è¨è¨ˆé«˜åº¦å°ˆæ¥åŒ–çš„é«˜æ•ˆæ ¼å¼ï¼ŒåŒæ™‚åˆä¸é—œé–‰å¯èƒ½å…·æœ‰æˆªç„¶ä¸åŒçš„æ•¸å€¼åˆ†å¸ƒçš„æœªä¾†æ¨¡åž‹æž¶æ§‹çš„大門。
10. 推ç†(Inference)
上述大部分內容都é©ç”¨äºŽæŽ¨ç†å’Œè¨“練,但æ¯ç¨®éƒ½æœ‰ä¸€äº›ç‰¹å®šçš„復雜性。 推ç†å°æˆæœ¬/åŠŸè€—ç‰¹åˆ¥æ•æ„Ÿï¼Œå› 為模型通常åªè¨“練一次,但部署到數百è¬å®¢æˆ¶ã€‚è¨“ç·´ä¹Ÿæ›´åŠ å¾©é›œï¼Œæœ‰è¨±å¤šæ•¸å€¼ä¸Šæœ‰å•題的æ“作(見下文)。這æ„味著推ç†èŠ¯ç‰‡åœ¨é‡‡ç”¨æ›´å°ã€æ›´ä¾¿å®œçš„æ•¸å—æ ¼å¼æ–¹é¢é€šå¸¸é é é ˜å…ˆäºŽè¨“ç·´èŠ¯ç‰‡ï¼Œå› æ¤æ¨¡åž‹è¨“ç·´çš„æ ¼å¼å’Œæ¨¡åž‹æŽ¨ç†çš„æ ¼å¼ä¹‹é–“å¯èƒ½æœƒå‡ºç¾å¾ˆå¤§çš„å·®è·ã€‚ 有許多工具å¯ä»¥å¾žä¸€ç¨®æ ¼å¼é©æ‡‰å¦ä¸€ç¨®æ ¼å¼ï¼Œé€™äº›å·¥å…·å±¬äºŽä¸€å€‹èŒƒåœï¼š 一方é¢ï¼Œè¨“ç·´åŽé‡åŒ–(PTQ:post-training quantization)ä¸éœ€è¦åŸ·è¡Œä»»ä½•實際的訓練æ¥é©Ÿï¼Œåªéœ€æ ¹æ“šä¸€äº›ç°¡å–®çš„算法更新權é‡ï¼š 最簡單的方法是將æ¯å€‹æ¬Šé‡å››èˆäº”入到最接近的值。
The easiest is to simply round each weight to the nearest value. LLM.int8() 將除一å°éƒ¨åˆ†ä»¥å¤–的所有異常值權é‡è½‰æ›ç‚º INT8; GPTQ 使用有關權é‡çŸ©é™£çš„二階信æ¯ä¾†æ›´å¥½åœ°é‡åŒ–; Smoothquant 進行數å¸ä¸Šç‰æ•ˆçš„變æ›ï¼Œå˜—試平滑激活異常值; AWQ 使用有關激活的信æ¯ä¾†æ›´æº–確地é‡åŒ–最顯著的權é‡; QuIP å°æ¨¡åž‹æ¬Šé‡é€²è¡Œé 處ç†ï¼Œä½¿å…¶å°é‡åŒ–ä¸å¤ªæ•感; AdaRound å°‡æ¯ä¸€å±¤çš„èˆå…¥åˆ†åˆ¥å„ªåŒ–為二次二元優化; å˜åœ¨è¨±å¤šå…¶ä»–方法并且æ£åœ¨ä¸æ–·ç™¼å¸ƒã€‚許多“訓練åŽâ€é‡åŒ–方法通éŽä½¿ç”¨æŸç¨®ä¿®æ”¹åŽçš„訓練æ¥é©Ÿæˆ–代ç†ç›®æ¨™è¿ä»£å„ªåŒ–é‡åŒ–模型,從而模糊了與訓練的界é™ã€‚é€™é‡Œçš„é—œéµæ–¹é¢æ˜¯ï¼Œé€™äº›æ¥µå¤§åœ°é™ä½Žäº†æˆæœ¬ï¼Œä½†ç¾å¯¦ä¸–界的性能æå¤±é€šå¸¸æ¯”äººå€‘ç¶“å¸¸å¹æ§çš„簡單基準è¦å¤§ã€‚
å¦ä¸€æ–¹é¢ï¼Œé‡åŒ–感知訓練 (QAT:quantization-aware training) æœƒæ”¹è®Šç²¾åº¦å¹¶ç¹¼çºŒè¨“ç·´ä¸€æ®µæ™‚é–“ä»¥ä½¿æ¨¡åž‹é©æ‡‰æ–°çš„精度。所有é‡åŒ–æ–¹æ³•éƒ½æ‡‰è‡³å°‘éƒ¨åˆ†ä½¿ç”¨æ¤æ©Ÿåˆ¶ï¼Œä»¥åœ¨ç¾å¯¦ä¸–界性能ä¸å¯¦ç¾æœ€å°çš„精度æå¤±ã€‚這直接使用常è¦è¨“ç·´éŽç¨‹ä¾†ä½¿æ¨¡åž‹é©æ‡‰é‡åŒ–機制,通常被èªç‚ºæ›´æœ‰æ•ˆï¼Œä½†è¨ˆç®—æˆæœ¬æ›´é«˜ã€‚
11. 訓練(Training)
由于å‘åŽå‚³éžï¼Œè¨“ç·´ç¨å¾®å¾©é›œä¸€äº›ã€‚有 3 個 matmul——一個在å‰å‘傳éžä¸ï¼Œå…©å€‹åœ¨åŽå‘傳éžä¸ã€‚
æ¯å€‹è¨“ç·´æ¥é©Ÿæœ€çµ‚都會接收權é‡ï¼Œå°å„種數據進行一系列矩陣乘法,并產生新的權é‡ã€‚ FP8 è¨“ç·´æ›´åŠ å¾©é›œã€‚ä¸‹é¢æ˜¯ Nvidia FP8 訓練方法的ç¨å¾®ç°¡åŒ–版本。
這個清單的一些顯著特點: æ¯å€‹ matmul 都是 FP8 x FP8 å¹¶ç´¯åŠ ç‚º FP32 (實際上精度較低,但 Nvidia 告訴大家它是 FP32),然åŽé‡åŒ–為 FP8 ä»¥ç”¨äºŽä¸‹ä¸€å±¤ã€‚ç´¯åŠ å¿…é ˆæ¯” FP8 å…·æœ‰æ›´é«˜çš„ç²¾åº¦ï¼Œå› ç‚ºå®ƒæ¶‰åŠå°åŒä¸€å¤§åž‹ç´¯åŠ å™¨é€²è¡Œæ•¸è¬æ¬¡é€£çºŒçš„å°æ›´æ–°ï¼Œå› æ¤æ¯å€‹å°æ›´æ–°éœ€è¦å¾ˆé«˜çš„精度æ‰èƒ½ä¸å‘下èˆå…¥ç‚ºé›¶ï¼› æ¯å€‹ FP8 權é‡å¼µé‡éƒ½å¸¶æœ‰ä¸€å€‹æ¯”ä¾‹å› å。由于æ¯ä¸€å±¤çš„范åœå¯èƒ½é¡¯è‘—ä¸åŒï¼Œå› æ¤ç¸®æ”¾æ¯å€‹å¼µé‡ä»¥é©æ‡‰è©²å±¤çš„范åœè‡³é—œé‡è¦ï¼› æ¬Šé‡æ›´æ–°ï¼ˆåœ¨ä¸»æ¡†ä¹‹å¤–)å°ç²¾åº¦éžå¸¸æ•æ„Ÿï¼Œå¹¶ä¸”é€šå¸¸ä¿æŒè¼ƒé«˜çš„精度(通常為 FP32ï¼‰ã€‚é€™åˆæ¸çµç‚ºå¹…度ä¸åŒ¹é…â€”â€”æ¬Šé‡æ›´æ–°èˆ‡æ¬Šé‡ç›¸æ¯”很å°ï¼Œå› æ¤å†æ¬¡éœ€è¦ç²¾åº¦æ‰èƒ½ä½¿æ›´æ–°ä¸å‘下èˆå…¥ç‚ºé›¶ï¼› 最åŽï¼Œè¨“練與推ç†çš„一大å€åˆ¥æ˜¯æ¢¯åº¦æœ‰æ›´å¤šçš„æ¥µç«¯ç•°å¸¸å€¼ï¼Œé€™ä¸€é»žéžå¸¸é‡è¦ã€‚å¯ä»¥å°‡æ¿€æ´»æ¢¯åº¦ï¼ˆä¾‹å¦‚ SwitchBackã€AQT)é‡åŒ–為 INT8ï¼Œä½†æ¬Šé‡æ¢¯åº¦è¿„ä»Šç‚ºæ¢æŠµåˆ¶äº†é€™ç¨®åŠªåŠ›ï¼Œå¿…é ˆä¿ç•™åœ¨ FP16 或 FP8 (1,5,2) ä¸ã€‚
上一篇:產å“大æç§˜ï¼åŒç‚º32通é“,零...
下一篇:ChatGPT算力芯片如何åšç®—力輸出
ä¸åœ‹å‚³å‹•網版權與å…è²¬è²æ˜Žï¼šå‡¡æœ¬ç¶²æ³¨æ˜Ž[來æºï¼šä¸åœ‹å‚³å‹•ç¶²]的所有文å—ã€åœ–片ã€éŸ³è¦–å’Œè¦–é »æ–‡ä»¶ï¼Œç‰ˆæ¬Šå‡ç‚ºä¸åœ‹å‚³å‹•ç¶²(www.hysjfh.com)ç¨å®¶æ‰€æœ‰ã€‚如需轉載請與0755-82949061è¯ç³»ã€‚任何媒體ã€ç¶²ç«™æˆ–å€‹äººè½‰è¼‰ä½¿ç”¨æ™‚é ˆæ³¨æ˜Žä¾†æºâ€œä¸åœ‹å‚³å‹•ç¶²â€ï¼Œé•å者本網將追究其法律責任。
本網轉載并注明其他來æºçš„稿件,å‡ä¾†è‡ªäº’è¯ç¶²æˆ–æ¥å…§æŠ•稿人士,版權屬于原版權人。轉載請ä¿ç•™ç¨¿ä»¶ä¾†æºåŠä½œè€…ï¼Œç¦æ¢æ“…自篡改,é•è€…è‡ªè² ç‰ˆæ¬Šæ³•å¾‹è²¬ä»»ã€‚
相關資訊