քոթուկ Հիշողության օպտիմիզացում մեծ լեզուների մոդելների եզրակացության և ճշգրտման համար - Unite.AI
Միացեք մեզ

Արհեստական ​​բանականություն

Հիշողության օպտիմիզացում մեծ լեզուների մոդելի եզրակացության և ճշգրտման համար

mm
Թարմացվել է on
Հիշողություն մեծ լեզվի մոդելի եզրակացության համար

Լեզուների խոշոր մոդելները (LLM), ինչպիսիք են GPT-4-ը, Bloom-ը և LLaMA-ն, հասել են ուշագրավ հնարավորությունների՝ չափելով մինչև միլիարդավոր պարամետրեր: Այնուամենայնիվ, եզրակացության կամ ճշգրտման համար այս զանգվածային մոդելների տեղակայումը դժվար է հիշողության ահռելի պահանջների պատճառով: Այս տեխնիկական բլոգում մենք կուսումնասիրենք LLM-ի եզրակացության ընթացքում հիշողության սպառումը գնահատելու և օպտիմալացնելու տեխնիկան և տարբեր ապարատային կարգավորումների վրա ճշգրտում:

Հասկանալով հիշողության պահանջները

LLM-ի բեռնման համար պահանջվող հիշողությունը հիմնականում որոշվում է պարամետրերի քանակով և պարամետրերը պահելու համար օգտագործվող թվային ճշգրտությամբ: Մի պարզ կանոն.

  • X միլիարդ պարամետրերով մոդելի բեռնումը մոտավորապես պահանջում է 4X ԳԲ VRAM-ի մեջ 32-bit լողացող ճշգրտություն
  • X միլիարդ պարամետրերով մոդելի բեռնումը մոտավորապես պահանջում է 2X ԳԲ VRAM-ի մեջ 16-bit bfloat16/float16 ճշգրտություն

Օրինակ, 175B պարամետրի GPT-3 մոդելը բեռնելու համար կպահանջվի մոտավորապես 350 ԳԲ VRAM bfloat16 ճշգրտությամբ: Այսօրվա դրությամբ խոշորագույն առևտրային պրոցեսորները, ինչպիսիք են NVIDIA A100-ը և H100-ը, առաջարկում են ընդամենը 80 ԳԲ VRAM, ինչը պահանջում է տենզորի զուգահեռություն և մոդելների զուգահեռության տեխնիկա:

Եզրակացության ժամանակ հիշողության հետքը գերակշռում է մոդելի պարամետրերով և արտադրված ժամանակավոր ակտիվացման տենսորներով: Եզրակացության ընթացքում հիշողության առավելագույն օգտագործման բարձր մակարդակի գնահատականը մոդելի պարամետրերի բեռնման և ակտիվացման հիշողության համար պահանջվող հիշողության գումարն է:

Եզրակացությունների հիշողության քանակականացում

Եկեք քանակականացնենք հիշողության պահանջները եզրակացության համար՝ օգտագործելով OctoCode մոդելը, որն ունի շուրջ 15 միլիարդ պարամետր bfloat16 ձևաչափով (~ 31 ԳԲ): Մենք կօգտագործենք Տրանսֆորմատորների գրադարան մոդելը բեռնելու և տեքստ ստեղծելու համար.

from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline
import torch
model = AutoModelForCausalLM.from_pretrained("bigcode/octocoder",
torch_dtype=torch.bfloat16,
device_map="auto",
pad_token_id=0)
tokenizer = AutoTokenizer.from_pretrained("bigcode/octocoder")
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
prompt = "Question: Please write a Python function to convert bytes to gigabytes.\n\nAnswer:"
result = pipe(prompt, max_new_tokens=60)[0]["generated_text"][len(prompt):]
def bytes_to_gigabytes(bytes):
return bytes / 1024 / 1024 / 1024
bytes_to_gigabytes(torch.cuda.max_memory_allocated())

Արդյունք:

29.0260648727417

GPU-ի հիշողության առավելագույն օգտագործումը կազմում է մոտ 29 ԳԲ, ինչը համընկնում է մոդելի պարամետրերը bfloat31 ձևաչափով բեռնելու համար 16 ԳԲ մեր գնահատականի հետ:

Եզրակացությունների հիշողության օպտիմիզացում քվանտացման միջոցով

Թեև bfloat16-ը սովորական ճշգրտությունն է, որն օգտագործվում է LLM-ների վերապատրաստման համար, հետազոտողները պարզել են, որ մոդելի կշիռների քանակականացումը ավելի ցածր ճշգրիտ տվյալների տեսակների համար, ինչպիսիք են 8-բիթանոց ամբողջ թվերը (int8) կամ 4-բիթանոց ամբողջ թվերը, կարող է զգալիորեն նվազեցնել հիշողության օգտագործումը նվազագույն ճշգրտության կորստով եզրակացության առաջադրանքների համար: տեքստի ստեղծում:

Եկեք տեսնենք OctoCode մոդելի 8-բիթանոց և 4-բիթանոց քվանտացումից հիշողության խնայողությունները.

</div>
# 8-bit quantization
model = AutoModelForCausalLM.from_pretrained("bigcode/octocoder", load_in_8bit=True, 
pad_token_id=0)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
result = pipe(prompt, max_new_tokens=60)[0]["generated_text"][len(prompt):]
bytes_to_gigabytes(torch.cuda.max_memory_allocated())</pre>
Արդյունք:
15.219234466552734
# 4-bit quantization
model = AutoModelForCausalLM.from_pretrained("bigcode/octocoder", load_in_4bit=True,
low_cpu_mem_usage=True, pad_token_id=0)
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer)
result = pipe(prompt, max_new_tokens=60)[0]["generated_text"][len(prompt):]
bytes_to_gigabytes(torch.cuda.max_memory_allocated())

Արդյունք:

9.543574333190918

8-բիթանոց քվանտացման դեպքում հիշողության պահանջը 31 ԳԲ-ից նվազում է մինչև 15 ԳԲ, մինչդեռ 4-բիթանոց քվանտացումը հետագայում նվազեցնում է այն մինչև ընդամենը 9.5 ԳԲ: Սա թույլ է տալիս գործարկել 15B պարամետր OctoCode մոդելը սպառողական GPU-ների վրա, ինչպիսին է RTX 3090-ը (24 ԳԲ VRAM):

Այնուամենայնիվ, նկատի ունեցեք, որ ավելի ագրեսիվ քվանտացումը, ինչպիսին 4-բիթն է, երբեմն կարող է հանգեցնել ճշգրտության նվազման՝ համեմատած 8 բիթ կամ bfloat16 ճշգրտության հետ: Հիշողության խնայողության և ճշգրտության միջև փոխզիջում կա, որը օգտվողները պետք է գնահատեն իրենց օգտագործման դեպքում:

Քվանտացումը հզոր տեխնիկա է, որը կարող է թույլ տալ LLM-ի տեղակայումը ռեսուրսներով սահմանափակ միջավայրերում, ինչպիսիք են ամպային օրինակները, ծայրամասային սարքերը կամ նույնիսկ բջջային հեռախոսները՝ կտրուկ նվազեցնելով հիշողության հետքը:

Հիշողության գնահատում ճշգրտման համար

Թեև քվանտացումը հիմնականում օգտագործվում է արդյունավետ եզրակացության համար, տեխնիկան, ինչպիսին է տենզորի զուգահեռությունը և մոդելի զուգահեռությունը, կարևոր են ուսուցման ընթացքում հիշողության պահանջները կառավարելու համար կամ նուրբ կարգավորում մեծ լեզվական մոդելներ.

Հիշողության առավելագույն սպառումը ճշգրտման ժամանակ սովորաբար 3-4 անգամ ավելի բարձր է, քան եզրակացությունը՝ հաշվի առնելով հիշողության լրացուցիչ պահանջները՝

  • Գրադիենտներ
  • Օպտիմիզատորի պետությունները
  • Հետ տարածման համար պահվող առաջանցից ակտիվացումներ

Պահպանողական գնահատականն այն է, որ X միլիարդ պարամետրերով LLM-ի ճշգրտումը պահանջում է շուրջը 4 * (2X) = 8X ԳԲ VRAM-ի bfloat16 ճշգրտությամբ:

Օրինակ, 7B պարամետրի LLaMA մոդելի ճշգրտումը կպահանջի մոտավորապես 7 * 8 = 56 ԳԲ VRAM մեկ GPU bfloat16 ճշգրտությամբ: Սա գերազանցում է ընթացիկ GPU-ների հիշողության հզորությունը, ինչը պահանջում է բաշխված ճշգրտման տեխնիկա:

Բաշխված նուրբ թյունինգի տեխնիկա

Մեծ մոդելների համար GPU-ի հիշողության սահմանափակումները հաղթահարելու համար առաջարկվել են մի քանի բաշխված ճշգրտման մեթոդներ.

  1. Տվյալների զուգահեռությունՏվյալների զուգահեռության դասական մոտեցումը կրկնում է ամբողջ մոդելը մի քանի GPU-ներում՝ միաժամանակ բաժանելով և բաշխելով ուսումնական տվյալների խմբաքանակները: Սա նվազեցնում է ուսուցման ժամանակը գծային կերպով GPU-ների քանակով, բայց չի նվազեցնում հիշողության առավելագույն պահանջը յուրաքանչյուր GPU-ի վրա:
  2. ԶՐՈ Փուլ 3Տվյալների զուգահեռության առաջադեմ ձև, որը բաժանում է մոդելի պարամետրերը, գրադիենտները և օպտիմիզատորի վիճակները GPU-ներում: Այն նվազեցնում է հիշողությունը՝ համեմատած դասական տվյալների զուգահեռության հետ՝ ուսուցման տարբեր փուլերի ընթացքում յուրաքանչյուր GPU-ի վրա պահելով միայն պահանջվող բաժանված տվյալները:
  3. Տենսորի զուգահեռությունՄոդելը կրկնօրինակելու փոխարեն, թենզորային զուգահեռությունը մոդելի պարամետրերը բաժանում է տողերի կամ սյունակների և բաշխում դրանք GPU-ների միջև: Յուրաքանչյուր GPU աշխատում է պարամետրերի, գրադիենտների և օպտիմիզատորի վիճակների բաժանված շարքի վրա, ինչը հանգեցնում է հիշողության զգալի խնայողության:
  4. Խողովակաշարերի զուգահեռությունԱյս տեխնիկան բաժանում է մոդելի շերտերը տարբեր GPU-ների/աշխատողների վրա, որոնցից յուրաքանչյուրը կատարում է շերտերի ենթաբազմություն: Ակտիվացումները փոխանցվում են աշխատողների միջև, ինչը նվազեցնում է առավելագույն հիշողությունը, բայց ավելացնում է կապի ծախսերը:

Այս բաշխված մեթոդների համար հիշողության օգտագործման գնահատումը աննշան է, քանի որ պարամետրերի, գրադիենտների, ակտիվացումների և օպտիմիզատորի վիճակների բաշխումը տարբեր տեխնիկայով տարբերվում է: Ավելին, տարբեր բաղադրիչներ, ինչպիսիք են տրանսֆորմատորի մարմինը և լեզվի մոդելավորման գլուխը, կարող են դրսևորել հիշողության բաշխման տարբեր վարքագիծ:

LLMem լուծում

Հետազոտողները վերջերս առաջարկել են LLMem, լուծում, որը ճշգրիտ գնահատում է GPU-ի հիշողության սպառումը, երբ կիրառում է բաշխված ճշգրտման մեթոդներ LLM-ներում մի քանի GPU-ներում:

GPU-ի հիշողության օգտագործման գնահատում նախապես պատրաստված LLM-ի ճշգրտման համար

GPU-ի հիշողության օգտագործման գնահատում նախապես պատրաստված LLM-ի ճշգրտման համար

LLMem-ը հաշվի է առնում այնպիսի գործոններ, ինչպիսիք են պարամետրերի վերահամադրումը նախքան հաշվարկը (ZeRO Փուլ 3), արդյունքի հավաքումը հետընթաց անցումում (տենզորի զուգահեռություն) և տրանսֆորմատորի մարմնի և լեզվի մոդելավորման գլխի համար հիշողության բաշխման տարբեր ռազմավարություններ:

Փորձարարական արդյունքները ցույց են տալիս, որ LLMem-ը կարող է գնահատել GPU-ի հիշողության առավելագույն օգտագործումը մեկ GPU-ի վրա ճշգրտված LLM-ների համար՝ մինչև 1.6% սխալի գործակիցով, որը գերազանցում է ժամանակակից DNNMem-ի սխալի միջին մակարդակը: 42.6%. Մի քանի GPU-ների վրա ավելի քան միլիարդ պարամետր ունեցող LLM-ների վրա բաշխված ճշգրտման մեթոդներ կիրառելիս, LLMem-ը հասնում է տպավորիչ միջին սխալի մակարդակի՝ 3.0%.

Նախապես ճշգրիտ գնահատելով հիշողության պահանջները՝ LLMem-ը կարող է օգնել օգտվողներին ընտրել ամենաարդյունավետ բաշխված ճշգրտման մեթոդը, որը խուսափում է հիշողությունից դուրս խնդիրներից՝ նվազագույնի հասցնելով մարզման ժամանակը:

Զարգացող տեխնիկա

Թեև քվանտացումը, տենզորային զուգահեռությունը և մոդելի զուգահեռությունը հաստատված տեխնիկա են, հետազոտողները շարունակում են ուսումնասիրել նոր մեթոդներ՝ LLM-ի արդյունավետ ուսուցման և տեղակայման սահմանները մղելու համար:

  1. LoRA և QLoRAԱյս տեխնիկան ներառում է ավելի փոքր մնացորդային ադապտերների մոդուլի ուսուցում՝ նախապես վերապատրաստված LLM-ը նոր գիտելիքներով թարմացնելու համար՝ հսկայական քանակի պարամետրերն ուղղակիորեն ճշգրտելու փոխարեն: Սա կարող է հանգեցնել հիշողության զգալի խնայողության՝ միաժամանակ պահպանելով մոդելի արդյունավետության մեծ մասը:
  2. Flash ՈւշադրությունԻնքն ուշադրության մեխանիզմը տրանսֆորմատորային մոդելների հիշողության և հաշվարկման խոչընդոտ է: FlashAttention-ը մոտենում է ստանդարտ ուշադրությանը գծային բարդությամբ՝ նվազեցնելով հիշողության պահանջները քառակուսից մինչև գծային մուտքային հաջորդականության երկարությամբ:
  3. Փորձագետների խառնուրդԱյս մոտեցումը պայմանականորեն ուղղորդում է յուրաքանչյուր մուտքային տվյալների նմուշ դեպի մասնագիտացված փորձագիտական ​​մոդել՝ այն ամբողջ մոդելով մշակելու փոխարեն: Այս դինամիկ սակավությունը կարող է խնայել հիշողությունը՝ ակտիվացնելով միայն փորձագետների ենթախումբը յուրաքանչյուր նմուշի համար:
  4. Հակադարձ մոդելային վիրաբուժությունՀետազոտողները ուսումնասիրել են վիրաբուժական մոդելի սեղմումը` պարբերաբար հեռացնելով ոչ այնքան կարևոր բաղադրիչները, ինչպիսիք են ուշադրության գլուխները, որպեսզի փոխեն հիշողությունը/արագությունը ճշգրտության հետ:
  5. ԲեռնաթափումՎերջապես, մեթոդները, որոնք բեռնաթափում են պարամետրերը, օպտիմիզատորի վիճակները կամ ակտիվացումները պրոցեսորի RAM-ի կամ սկավառակի վրա, կարող են լրացնել սահմանափակ GPU հիշողությունը մեծ մոդելների համար:

Այս առաջադեմ մեթոդները ցույց են տալիս աշխույժ հետազոտական ​​էկոհամակարգը, որը կենտրոնացած է LLM-ի արդյունավետ ուսուցման ժողովրդավարացման և տարբեր ապարատային միջավայրերում տեղակայման վրա:

Եզրափակում

Լեզուների մեծ մոդելների հիշողության պահանջները զգալի մարտահրավերներ են ստեղծում իրական աշխարհում դրանց լայն տարածման համար: Հասկանալով հիշողության գնահատման տեխնիկան և օգտագործելով քվանտացումը, բաշխված ուսուցման ռազմավարությունները և առաջացող նորարարությունները՝ մենք կարող ենք օպտիմալացնել LLM-ի տեղակայումը ռեսուրսներով սահմանափակված սարքերում:

LLMem-ի նման գործիքները ճանապարհ են հարթում դեպի հիշողության ճշգրիտ գնահատում՝ հնարավորություն տալով օգտվողներին ընտրել առավել հարմար ճշգրտման կոնֆիգուրացիան: Քանի որ սարքավորումը զարգանում է և հետազոտության առաջընթացը, մենք կարող ենք ակնկալել ավելի արդյունավետ LLM ուսուցում և եզրակացություններ, որոնք առաջընթաց են բերում բնական լեզվի մշակման և արհեստական ​​բանականության ոլորտում:

Մոդելի հզորության, ճշտության և ռեսուրսների օգտագործման միջև ճիշտ հավասարակշռություն հաստատելը կարևոր նշանակություն կունենա տարբեր տիրույթներում և օգտագործման դեպքերի լայնածավալ լեզվական մոդելների ամբողջական ներուժը բացելու համար: Ընդգրկելով հիշողության օպտիմիզացման տեխնիկան՝ մենք ավելի ենք մոտենում ապագայի, որտեղ ժամանակակից լեզվով AI-ն հասանելի է, մասշտաբելի և կայուն:

Ես անցկացրել եմ վերջին հինգ տարիները՝ ընկղմվելով մեքենայական ուսուցման և խորը ուսուցման հետաքրքրաշարժ աշխարհում: Իմ կիրքն ու փորձառությունը ստիպել են ինձ ներդրում ունենալ ավելի քան 50 տարբեր ծրագրային ապահովման ինժեներական նախագծերում՝ հատուկ ուշադրություն դարձնելով AI/ML-ին: Իմ շարունակական հետաքրքրասիրությունը նաև ինձ ձգում է դեպի Բնական լեզվի մշակումը, մի ոլորտ, որը ես ցանկանում եմ հետագայում ուսումնասիրել: