llama.cpp ã®åããæ¹ãšéååææ³

ã¯ããã«
Turingã¢ããã³ãã«ã¬ã³ããŒ17æ¥ç®ã§ãïŒä»æ¥ã¯ Research ããŒã ã®æè°·ãæ åœããŸãã
Research ããŒã ã§ã¯ãLLMã«ããå®å šèªåé転ãå®çŸããããã®æè¡éçºãè¡ã£ãŠããŸãããã®äžã§éèŠãªæè¡ã®ïŒã€ãéååã§ããéååã«ãã£ãŠå°ãããã§ãã©ã¡ãŒã¿ã衚çŸã§ããã°ãLLM ã®èšå€§ãªãã©ã¡ãŒã¿ã®ããŒã¿å§çž®ãå¯èœãšãªããŸããéååå®è£ ã¯ãããããšèããããŸãããä»åã¯å®è£ ã«ã¢ã¯ã»ã¹å¯èœãª llama.cpp ãšãã®éååæè¡ã«ã€ããŠèŠãŠãããŸãããïŒ
llama.cpp ãšã¯ Georgi Gerganov ãããäœã£ã PC ã® CPU ã ãã§ LLM ãåããã©ãããã©ãŒã ã§ãããã®åã®éã Llama, Llama2 ãåããšããã ãã§ãªã Bloom, StableLM ãªã©ããã€ãã® LLM ããµããŒããããŠããŸããLLM ã¯åŸæ¥ãããŒã¿ã»ã³ã¿ãŒã§å€§éã®GPUãªãœãŒã¹ã®ããšã§åãã®ã§ãããllama.cpp ã¯ãã©ã¡ãŒã¿æ°ãæ¯èŒçå°ãã LLM ã«éãããŸããããããããŒããŠã§ã¢ãªãœãŒã¹ãéãããŠãã PC äžã§åããšãããªããªãã®ã¹ã°ã¬ã¢ãã§ããããããããã䜿ããé床ã§ããæ¬èšäºã§ã¯ååã§ llama.cpp ã®åããæ¹ã«ã€ããŠèª¬æããŸãã
åŸåã§ã¯ llama.cpp ã®éååã«ã€ããŠèª¬æããŸããä»®ã«7Bã¢ãã«ã®ãã©ã¡ãŒã¿ãFP32ã§æ§æãããšãããšãã©ã¡ãŒã¿ã ãã§28GBå æããŠããŸããŸãããããå æããéèŠãªæè¡ãéååã§ããllama.cpp ã§ã¯ 2, 3, 4, 5, 6, 8bit éååããµããŒãããŠããã4bitéååã ãš Llama2-7B ã¢ãã«ã®ãµã€ãºã¯ããã4GBçšåºŠã§ãã
ãŸã㯠llama.cpp ãPCäžã§åãããŠã次ã«éååææ³ã«ã€ããŠèŠãŠãããŸãããïŒ
llama.cpp ã§ Llama2-7B ãåãããŠã¿ãïŒ
ç°å¢æ§ç¯ãšã€ã³ã¹ããŒã«
Windows ã® WSL ç°å¢ã§èª¬æããŸããWSL ã䜿ããå Žåãbuild-essential ãã€ã³ã¹ããŒã«ããã ãã§ãã
$ sudo apt install build-essential
次ã«ãªããžããªã®ã¯ããŒã³ãšãã«ãã§ãã
$ git clone https://github.com/ggerganov/llama.cpp
$ cd llama.cpp
$ make
ããã§ãllama.cpp çŽäžã«å®è¡ãã¡ã€ã« main ãã§ããŠããã¯ãã§ããããã ãã§ããã£ããªããã«ãã¯å®äºã§ãã
ã¢ãã«ã®çšæ
次ã«ã¢ãã«ãããŠã³ããŒãããŠããŸãã䟿å©ãªããšã« HuggingFace äžã«éååæžã¿ãã¡ã€ã«ããããŸãããããã察象ãšãªãã¢ãã«ãããŠã³ããŒãããŸãããã¡ã€ã«åã§ âq4_K_Sâ, âq2_Kâ ãªã©ãšæžããŠããã®ã¯éååã®åã§ããåã«ã€ããŠã¯ãã¡ããåç §ããŠãã ããã ããŠã³ããŒããããã¡ã€ã«ã¯ã llama.cpp/models ãã«çœ®ããŸãã2023幎12æ13æ¥çŸåšãäžèšã®å Žæã«çœ®ããŠããã¢ãã«ãã¡ã€ã«ã¯ GGMF ååŒã§ããçŸåš llama.cpp 㯠GGUF ååŒã«ç§»è¡ããŠããããã®åããåããŸãããããããllama.cpp ã«ã¯å€æããŒã«ããã£ããã«å ¥ã£ãŠããŸãã®ã§ãããã以äžã®ããã«å ¥åããŠå®è¡ããŸãã
$ python3 convert-llama-ggml-to-gguf.py --input [input file name] --output [output file name]
äŸãã°æ¬¡ã®ããã«å ¥åããŠå€æããŸãã
$ python3 convert-llama-ggml-to-gguf.py --input ./models/llama-2-7b-chat.ggmlv3.q8_0.bin output ./models/llama-2-7b-chat.ggmlv3.q8_0.gguf
ããããå®è¡ïŒ
å®è¡ã¯ç°¡åã§ããmain ãå®è¡ããŠã-m ã§ã¢ãã«ãæå®ãã-p ã§æç€ºãäžããŸããéååã®åããšã«å®è¡ãããŸãã
8bit å (q8_0)
æåã« 8bit éååã¢ãã«ããå®è¡ãããŠè¡ããŸãããã8bit åã¯ç²ŸåºŠå£åãã»ãšãã©ãªãã®ã§æ¯èŒã®åºæºã«ãªããŸããLlama2-7B 8bit éååã¢ãã«ã«åå·é§ ããæ±äº¬é§ ãžã®è¡ãæ¹ãèããŠã¿ãŸãããïŒ
$ ./main -m ./models/llama-2-7b-chat.ggmlv3.q8_0.gguf --temp 0.1 -p "### Instruction: Tell me how to get to Tokyo station from Shinagawa station. ### Response:â
Instruction: Tell me how to get to Tokyo station from Shinagawa station. ### Response: To get to Tokyo Station from Shinagawa Station, you can take the JR Yamanote Line train bound for Tokyo Station. From Shinagawa Station, exit through the north side of the station and follow the signs to the JR Yamanote Line platform. Once on the train, take any train headed towards Tokyo Station. The journey takes approximately 15 minutes. Alternatively, you can also take the Keikyu Line train bound for Tokyo Station from Shinagawa Station. This journey takes around 20 minutes. Please note that some trains may not stop at Shinagawa Station, so be sure to check the train schedule in advance. [end of text]
Google æ¥æ¬èªèš³ã§ãã
説æ: åå·é§ ããæ±äº¬é§ ãžã®è¡ãæ¹ãæããŠãã ããã ### åç: åå·é§ ããæ±äº¬é§ ã«è¡ãã«ã¯ãJR å±±æç·ã®æ±äº¬é§ è¡ãã«ä¹ããŸãã åå·é§ ããã¯é§ ã®ååŽãåºãŠãæšèã«åŸã£ãŠJRå±±æç·ããŒã ãžåãããŸãã é»è»ã«ä¹ã£ãããæ±äº¬é§ è¡ãã®é»è»ã«ä¹ããŸãã æèŠæéã¯çŽ15åã§ãã ãŸãã¯ãåå·é§ ãã京æ¥ç·ã®æ±äº¬é§ è¡ãã«ä¹è»ããããšãã§ããŸãã æèŠæéã¯çŽ 20 åã§ãã ãªããé»è»ã«ãã£ãŠã¯åå·é§ ã«åè»ããªãå ŽåããããŸãã®ã§ãäºåã«é»è»ã®æå»è¡šãã確èªãã ããã [æ¬æçµãã]
埮åŠãªæãã§æ£ãããªããšããããããŸãããããããæå³ããã¿åã£ãŠãããŠããŸããããã 7B ã¢ãã«ã®ããŒã¹ã®çµæãšèããŠãã ããããã® 8bit ã® q8_0 åã®ãµã€ãºã¯ 6.67GiB ã§ãç§ã®ããŒãPCïŒWindows 11 WSL, Core -7 1360P, 32GB 以äžãåãç°å¢ïŒ äžã§ã®å®è¡æéã¯çŽ 38ç§ã§ãã
4bit å (q4_K_M)
次㫠4bit éåå q4_K_M åã§å®è¡ããŠã¿ãŸãããã
$ ./main -m ./models/llama-2-7b-chat.ggmlv3.q4_K_M.gguf --temp 0.1 -p "### Instruction: Tell me how to get to Tokyo station from Shinagawa station. ### Response:â
Instruction: Tell me how to get to Tokyo station from Shinagawa station. ### Response: Sure! To get to Tokyo Station from Shinagawa Station, you can take the JR Yamanote Line train. From Shinagawa Station, exit through gate 4 and follow the signs to platform 10. Take the train bound for Tokyo Station, and the journey should take around 15 minutes. Alternatively, you can also take the Keikyu Line train from Shinagawa Station to Tokyo Station, which takes around 20 minutes. Please note that some trains may not run directly between these stations, so be sure to check the schedules beforehand. [end of text]
Google æ¥æ¬èªèš³ã§ãã
説æ: åå·é§ ããæ±äº¬é§ ãžã®è¡ãæ¹ãæããŠãã ããã ### å¿ç: ãã¡ããã§ã! åå·é§ ããæ±äº¬é§ ãžã¯JRå±±æç·ãå©çšããŸãã åå·é§ ããã¯4çªã²ãŒããåºãŠãæšèã«åŸã£ãŠ10çªç·ããŒã ãžãæ±äº¬é§ è¡ãã«ä¹è»ããæèŠæéã¯çŽ15åã§ãã ãŸããåå·é§ ããæ±äº¬é§ ãŸã§äº¬æ¥ç·ãå©çšããããšãã§ããæèŠæéã¯çŽ 20 åã§ãã ãªããäžéšã®åè»ã¯äž¡é§ éãçŽéé転ããªãå ŽåããããŸãã®ã§ãäºåã«æå»è¡šãã確èªãã ããã [æ¬æçµãã]
ãã®åã®çµæã埮åŠã§ãããåæ§ã«ããããæå³ããã¿åã£ãŠãããŠããŸãã8bit ã®çµæãšæ¯ã¹ããšãããŸãå£åããŠããæãã¯ãªãããšæããŸãããã® q4_K_M åã§ã®ãµã€ãºã¯ 3.8GiB ã§ãããŒãPCã§ã®å®è¡æéã¯çŽ21ç§ã§ãã4bit åã«ãšããªã£ãŠãæŒç®åæ°ãšããç¹ã§ã¯å¢ããŠããã®ã§ããããã©ã¡ãŒã¿ãµã€ãºãå°ãããªã£ãŠããã®ã§ããã£ãã·ã¥ã«ããããããããªã£ãŠãããšèããããŸãã
2bit å (q2_K)
æåŸã« 2bit éåå q2_K åã§ããã¯ãã㊠2bit ã§æ©èœããã®ã§ããããïŒ
./main -m ./models/llama-2-7b-chat.ggmlv3.q2_K.gguf --temp 0.1 -p "### Instruction: Tell me how to get to Tokyo station from Shinagawa station. ### Response:â
Instruction: Tell me how to get to Tokyo station from Shinagawa station. ### Response: Sure, I'd be happy to help! To get from Shinagawa station to Tokyo station, you have several options:
- JR Train: You can take a JR train from Shinagawa station to Tokyo station. The journey takes around 20-30 minutes, depending on the train type and the time of day. From Tokyo station, you can transfer to other JR trains or subways to reach your destination.
- Keikyu Line: You can also take the Keikyu line from Shinagawa station to Tokyo station. This journey takes around 15-20 minutes. From Tokyo station, you can transfer to other Keikyu trains or subways to reach your destination.
- Tokyo Metro: If you prefer to use the Tokyo Metro, you can take the Yoden-Rapid train from Shinagawa station to Tokyo station. This journey takes around 20-30 minutes. From Tokyo station, you can transfer to other Tokyo Metro trains or subways to reach your destination.
- Tokyo Waterfront Line: Another option is to take the Tokyo Waterfront Line from Shinagawa station to Tokyo station. This journey takes around 15-20 minutes. From Tokyo station, you can transfer to other Tokyo Metro trains or subways to reach your destination.
Google æ¥æ¬èªèš³ã§ãã
説æ: åå·é§ ããæ±äº¬é§ ãžã®è¡ãæ¹ãæããŠãã ããã ### åç: ã¯ããåãã§ãæäŒããããŠããã ããŸãã åå·é§ ããæ±äº¬é§ ãŸã§è¡ãã«ã¯ãããã€ãã®æ¹æ³ããããŸãã
- JR é»è»: åå·é§ ããæ±äº¬é§ ãŸã§ JR é»è»ããå©çšããã ããŸãã æèŠæéã¯åè»ã®çš®é¡ãæé垯ã«ããããŸãããçŽ20ïœ30åçšåºŠã§ãã æ±äº¬é§ ããã¯ãJRãå°äžéãä¹ãç¶ãã§ç®çå°ãŸã§è¡ãããšãã§ããŸãã
- 京æ¥ç·: åå·é§ ããæ±äº¬é§ ãŸã§äº¬æ¥ç·ãå©çšããããšãã§ããŸãã æèŠæéã¯çŽ 15 ïœ 20 åã§ãã æ±äº¬é§ ããã¯ãä»ã®äº¬æ¥é»è»ãå°äžéã«ä¹ãæããŠç®çå°ãŸã§è¡ãããšãã§ããŸãã
- æ±äº¬ã¡ãã: æ±äº¬ã¡ããããå©çšã®å Žåã¯ãåå·é§ ããæ±äº¬é§ ãŸã§äºé»å¿«éé»è»ã«ä¹è»ã§ããŸãã æèŠæéã¯çŽ 20 ïœ 30 åã§ãã æ±äº¬é§ ããã¯ãæ±äº¬ã¡ããã®ä»ã®é»è»ãå°äžéã«ä¹ãæããŠç®çå°ãŸã§è¡ãããšãã§ããŸãã
- æ±äº¬èšæµ·ç·: åå·é§ ããæ±äº¬é§ ãŸã§æ±äº¬èšæµ·ç·ã«ä¹ãã®ãéžæè¢ã§ãã æèŠæéã¯çŽ 15 ïœ 20 åã§ãã æ±äº¬é§ ããã¯ãæ±äº¬ã¡ããã®ä»ã®é»è»ãå°äžéã«ä¹ãæããŠç®çå°ãŸã§è¡ãããšãã§ããŸãã
京æ¥(Keikyu)ãæ±äº¬ã¡ããã«å ããŠãæ±äº¬èšæµ·ç·(Tokyo Waterfront Line) ãšããè¬ã®è·¯ç·ãŸã§ç»å ŽããŸããïŒç¬ïŒãæã®æ§é èªäœãåçãšããŠã®æ¹åæ§ã¯ç¶æããŠããŸããq2_K åã§ã®ãµã€ãºã¯ 2.67GiB ã§ããå®è¡æéã¯çŽ46ç§ãšé·ããªã£ãŠããŸãã
ãã®ããã« 4bit ãããã§ããã°ãå
ã® 8bit ã®ç²ŸåºŠããã¯ããã»ã©å£åããŠããªãæãã§ãã2bit ã§ãçšé次第ã§ã¯äœ¿ãããããããŸããããã¡ããããã¡ããšãã粟床è©äŸ¡ã¯å¿
èŠã§ãããã®ããã«å€§å¹
ã«ãã©ã¡ãŒã¿ãµã€ãºãæžãããéååã®ä»çµã¿ã¯ã©ããªã£ãŠããã®ã§ãããããllama.cpp ã®éååææ³ã詳ããèŠãŠãããŸãããïŒ
llama.cpp ãš GGML, GGUF ã«ã€ããŠ
åé ã§æžããŸããããllama.cpp ãéçºããã®ã Georgi Gerganov(GG) ããã§ãããã® GG ãããéçºãã ML(Machine Learning) ã©ã€ãã©ãªã GGML ã§ããllama.cpp 㯠GGML ã䜿ã£ãŠå®è£
ãããŠããŸããGG ããããããæ¹ã§ãããllama.cpp ã ãã§ãªããML ã©ã€ãã©ãªãŸã§äœã£ãŠãŸãããã® GGML 㯠éååããã Tensor ãæ±ãåå®çŸ©ãšãæ§ã
ãªéåå颿°ïŒå
ç©èšç®ãªã©ïŒã ML åãã® softmax ãªã©äžå¯æ¬ ãªé¢æ°ã倿°æ±ããŸããGGML ã¯Cèšèªã§æžãããŠãããFP16 ããµããŒãããä»ã2,3,4,5,6,8 bit ã®éåååããµããŒãããŸããå ããŠãApple ã® M1/M2/M3 ã·ãªãŒãºã® CPU (ARM64 arch) ã® SIMD æŒç®åœä»€(NEON) ããIntek x86 ã® SIMD æŒç®åœä»€ (AVX/AVX2) ãæé©åå®è£
ããŠãããCPU äžã§é«éã«å®è¡ããããã®æ§ã
ãªå·¥å€«ãæã蟌ãŸããŠããŸãã
GGML 㯠ML ã©ã€ãã©ãªã§ãããšåæã«ãã©ãŒãããã®æå³ã§ããããŸããllama.cpp ã§åããå Žå㯠GGML ãã©ãŒãããã§ã¢ãã«ãå®çŸ©ãããŠããå¿
èŠãããã®ã§ãããllama.cpp 㯠GGML ãããŒã¹ã«ããã«æ¡åŒµæ§ãé«ãã GGUF ãã©ãŒãããã«2023幎8æã«ç§»è¡ããŸããããã以éãllama.cpp ã§ LLaMA 以å€ã® LLM ãåãããã«ãªã£ãŠããŸããã
GGUF 㯠GGML ã䜿ã£ãæšè«çšã®ã¢ãã«ãš Executor ãä¿åããããã®ãã€ããªãã©ãŒãããã§ããçŸæç¹(2023/12)ã§ã®ææ° llama.cpp ã§ã¯ã¢ãã«ã®ãã©ãŒããã㯠GGUF ã§ãªããšåããŸããã
GGML éååå
ããããGGML ã§å®çŸ©ãããŠããéååã®ææ³ã«ã€ããŠèŠãŠãããŸãããã

ãŸããå³1-1 ãèŠãŠãã ããããã㯠fp32 ã§å®çŸ©ããããã©ã¡ãŒã¿ã int4 ã«å€æããã€ã¡ãŒãžã§ããå®éã«åºçŸããããŒã¿ã®ç¯å²ïŒãã®å³ã ãš -2.9~3.2ïŒãã¿ãŠãããã int4 ã®ç¯å²ã«æå€§éã«ã¹ã±ãŒã«ããããšãèããŸãããã®å Žåã4bit ã ãš16段é以äžã«ã¯ãªããŸããããæ£è² ã§é åãé察称ïŒ-8~7ïŒããã€æ£è² ã®ã©ã¡ããã«ãããã£ãŠãããšãäŸãã°ãã©ã¡ãŒã¿ãå
šãŠæ£ã ãšãããšãè² ã®é åã¯æªäœ¿çšã§æ
å ±éçã«æå¹å©çšãããŠããŸãããããã¯ããŸãããææ³ãšã¯èšããªãã§ãããã
ããã§ãå³1-2 ã®ããã« int4 ã§ã¯ãªã uint4 ã«ãããšã©ããªãã§ãããã倿åã®ãã©ã¡ãŒã¿ã®æå°å€ïŒå³ã®å Žå -2.9ïŒã0ïŒæå€§å€ïŒå³ã®å Žå 3.2ïŒã15 ãšããã°ã4bit ã®æå€§éã®è¡šçŸåã䜿ããŸãã
ãã®èãæ¹ãããããŒã¿ïŒãã©ã¡ãŒã¿ïŒå
šäœã§ã¯ãªããããäžå®ã®ãããŸãããšã«å®çŸ©ããããšã«ãããšããã 4bit ã®æ
å ±ããã现ããæ±ããŸãããã©ã¡ãŒã¿å
šäœã§ã¿ããšã°ãã€ããŠããŠããããäžå®éã§åºåããšããŒã¿ãåã£ãŠããããšãå€ãã®ã§ããå³1-3 ã§èª¬æããŸãããã®å³ã§ã¯ããããŒã¿ã®ãŸãšãŸãã blockããã® block ãããã€ãéãŸã£ãŠ super-block ã圢æããŸãããã®ãããªãšãã« super-block ã§ã®æå°å€ãã²ã¿ãšããŠå®çŸ©ãããããåºæºã« super-block ã§ã®ç¯å²ãã¹ã±ãŒã«ãããŸãããããŸã§ã ãšãå³1-2 ãšåãã§ããããããããã« super-block ãããå°ããããŒã¿ã®ãŸãšãŸãã§ãã block ã«å¯ŸããŠã2段éã§ã¹ã±ãŒã«ããããŠããããšã«ããŸãããããããšãã现ãã 4bit ã®å¹
ãå®çŸ©ã§ããŸãã
GGML ã§ã¯ä»¥äžã®èãæ¹ã§ 4bit + α ã®ä»å ããŒã¿ãæãããããšã«ãã粟床ãäžããŠããŸããGGML ã§ã¯ã©ã®åã super-block 㯠256ååäœã§ãããblock ã®åæ°ã¯åã«ãã£ãŠç°ãªããŸããQ4_K (4bit) ã§ã¯ 32åã§ãããQ2_K (2bit), Q3_K (3bit) ã§ã¯ 16 åã§ãæ
å ±éãå°ãªãåãblock ããã现ããããŠä»å ããããå¢ãããŠããŸããäžæ¹ãQ8_K ã§ã¯ block èªäœããããŸãããsuper-block ã®äžéå±€ã®ã¿ã§ãã
Q4_K å (4bit)
次ã«å
·äœäŸããšã£ãŠè©³ããèŠãŠãããŸãããã

ãã㯠Q4_K åã®æ§é äœå®çŸ©ã§ããqs ãšããã®ã 4bit ããŒã¿ãïŒã€ uint8_t åã«ãããã³ã°ããŠãåèš256 å (super-block)åã®ããŒã¿ãé
åã§æã£ãŠããŸããd ã¯å³1-3 ã® super-block ã®ã¹ã±ãŒã«ã§ãscales ãšãªã£ãŠããã®ããblock ã® scale ãš minïŒã²ã¿ïŒããããã³ã°ããããŒã¿ã§ããscale ãš min 㯠6bit ã§ãããã super-block ãæ§æãã block 8åã«å¯ŸããŠããããå®çŸ©ããŠããŸããå°ããããã«ããã§ãããuinit8_t scales[12] ã¯æ¬¡ã®ããã«ãããã³ã°ãããŠããŸãã

ãã®ãããªæãã§ã6bit x 2 (scale ãš min) x 8 = 96 bit = 12 byte ããã®ããã«ããŒã¿ãè©°ã蟌ãŸããŠããŸããæ¬¡ã«ããã®æ§é äœãå³ç€ºãããšæ¬¡ã®ããã«ãªã£ãŠããŸãã

ããŒã¿ã32åãŸãšããŠæ±ã block ãšããblock ããšã« min ãš scales ã® 6bit ããŒã¿ãæã£ãŠããããããŠãblock ã8åéã㊠super-block ãæ§æããsuper-block ã§ dminïŒã²ã¿ïŒãš dïŒã¹ã±ãŒã«ïŒãæã£ãŠããããšããæ§é ã§ãã
ã§ã¯ãããããšã«ã©ã®ããã«ããŠéååããŒã¿ãäœãããŠããã®ããããã¯ãã®éåååããã©ã®ããã«ããŠããŒã¿ãããšã®ããŒã¿ã«åŸ©å
ã§ããããèŠãã°ãããããããšæããŸããå³ç€ºãããšæ¬¡ã®ããã«ãªããŸãã

ãã®ãããªåŸ©å
éçšãçµãŠå
ã®ããŒã¿ã«ãªããŸããéåå 4bit ããŒã¿ã¯å·Šäžã® qs ã§ããããããæ§é äœå
ã«ãã scales, d, mins, dmin ãå³ã®ããã«èšç®ããŸãã
以äžãèŠãŠããããã«éåå Q4_K å㯠256 åã®ããŒã¿ããŸãšããŠæ±ãã®ã§ããã1èŠçŽ ãããã«ãããšã©ã®çšåºŠã®ããŒã¿ãµã€ãºã«ãªãã®ã§ãããããæ§é äœã®ãµã€ãºãèŠããšã4(qs) x 256 + 6(scale, min) x 2 x 8 + 16 (d) + 16 (dmin) = 1152 bit ã§ãããããèŠçŽ æ° 256 ã§å²ããš 1152/256 = 4.5 (bit / element) ãšãªããŸãã4bit éååãšããã®ã¯åèŠçŽ 4bit ã« 0.5bit ã®ä»å bit ãã€ããããšã«ããã粟床ãäžããŠãããšãããŸãã
Q2_K å (2bit)ãQ3_K å (3bit)
ãã¡ã㯠Q4_K ãããèŠçŽ ãããã®æ
å ±éãå°ãªãã®ã§ super-block ã®ãµã€ãºã¯åãã§ãããblock ãµã€ãºã¯ 16 åãšããŠããããã现ããã¹ã±ãŒã«ãããããšããŠããŸããå®çŸ©ã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã

Q2_K ã®èŠçŽ ãããã®ããŒã¿ãµã€ãºã¯ (2 x 256 + 4 x 2 x 16 + 16 + 16) / 256 = 2.625 bit / element ãšãªããŸãã
åæ§ã« Q3_K ã§ã¯ (256 x 3 + 6 x 16 + 16) / 256 â 3.44 bit / element ã§ãã

ãã®äžã§ã¯ Q8_K åã¯ç¹æ®ã§ããã¹ã±ãŒã«ãã²ã¿ã§ã¯ block ãšããéå±€ããªããsuper-block ãšããåäœã§ã¹ã±ãŒã«å€ãæã£ãŠããã ãã§ããQ8_K ã¯äžé衚çŸãšå
ç©èšç®ã®ãšãã«äœ¿ãããåã§ããã®ãã llama.cpp å
éšã®èšç®éçšã§ã¯é »åºããŸãããŸããèšç®ãæ©ãããããã« bsums ãšãã blockïŒããã§ã¯ 16åïŒåäœã§åèšå€ãæã£ãŠããŸããããã«ãããä»ã®åãšã®èšç®ãæ©ãã§ããããã«ãªã£ãŠããŸããèŠçŽ ãããã®ãµã€ãºã¯ããããæ¬¡ã®éãã§ãã
Q5_K åïŒ(5 x 256 + 6 x 2 x 8 + 16 + 16) / 256 = 5.5 bit / element
Q6_K åïŒ(6 x 256 + 8 x 16 + 16) / 256 â 6.56 bit / element
k-quantïŒllama.cpp ã§ã®éåååŠç
ãããŸã§èŠãŠããããã«ãGGML ã®éåå颿°ã ãã䜿ã£ãŠãéååãåéåååã®æŒç®ãã§ããŸããã§ã¯ãllama.cpp ã®éååææ³ k-quant ãšã¯äœãè¡ã£ãŠããã®ã§ãããããllama.cpp ã®ãµã€ãã«èª¬æããããŸãã4bit éååã ãã§ã Q4_K_M ãš Q4_K_S ããããŸããããã¯ã©ãéãã®ã§ãããããQ4_K_S ã¯åºæ¬çã«å šãŠã® Tensor ã«å¯ŸããŠãQ4_K ã䜿ã£ãŠããã®ã§ãããQ4_K_M 㯠attention.wv ãš feed_forward.w2 ã® Tensor ã®ååã« Q6_K ã䜿ã£ãŠããŸããããã¯åºåã«é¢ä¿ãããšããã¯ç²ŸåºŠãé«ããããšããããšãªã®ã§ããããå®éã« LLaMA2 ã§ã® Layer åŠçãèŠãŠãããŸããllama.cpp äžã§ãLLaMA2-7B-Q4_K_M ãå®è¡ããããšãå Layer ã®ãã°ãåºãŠããŸãã
llama_model_loader: - tensor 0: token_embd.weight q4_K [ 4096, 32000, 1, 1 ]
llama_model_loader: - tensor 1: output_norm.weight f32 [ 4096, 1, 1, 1 ]
llama_model_loader: - tensor 2: output.weight q6_K [ 4096, 32000, 1, 1 ]
llama_model_loader: - tensor 3: blk.0.attn_q.weight q4_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 4: blk.0.attn_k.weight q4_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 5: blk.0.attn_v.weight q6_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 6: blk.0.attn_output.weight q4_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 7: blk.0.attn_norm.weight f32 [ 4096, 1, 1, 1 ]
llama_model_loader: - tensor 8: blk.0.ffn_gate.weight q4_K [ 4096, 11008, 1, 1 ]
llama_model_loader: - tensor 9: blk.0.ffn_down.weight q6_K [ 11008, 4096, 1, 1 ]
llama_model_loader: - tensor 10: blk.0.ffn_up.weight q4_K [ 4096, 11008, 1, 1 ]
llama_model_loader: - tensor 11: blk.0.ffn_norm.weight f32 [ 4096, 1, 1, 1 ]
llama_model_loader: - tensor 12: blk.1.attn_q.weight q4_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 13: blk.1.attn_k.weight q4_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 14: blk.1.attn_v.weight q6_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 15: blk.1.attn_output.weight q4_K [ 4096, 4096, 1, 1 ]
llama_model_loader: - tensor 16: blk.1.attn_norm.weight f32 [ 4096, 1, 1, 1 ]
llama_model_loader: - tensor 17: blk.1.ffn_gate.weight q4_K [ 4096, 11008, 1, 1 ]
llama_model_loader: - tensor 18: blk.1.ffn_down.weight q6_K [ 11008, 4096, 1, 1 ]
llama_model_loader: - tensor 19: blk.1.ffn_up.weight q4_K [ 4096, 11008, 1, 1 ]
...
ãã®ãã°ã®äžã§ãq6_K ãšãªã£ãŠãã Layer ã Q6_K ã«ãªã£ãŠãã Layer ã§ããLLaMA2-7B ã§ã¯å šäœã§ 291 Layer ã§æ§æãããŠããŸããã33 Layer ã« Q4_K ã®ãããã« Q6_K ã䜿ãããŠããŸãããã®ããã«ç²ŸåºŠãæ±ãããã Layer ã«å¹æçã«ããäžäœã®éåååã䜿ã£ãŠããã®ã§ãã
ãŸãšããšä»åŸ
以äžãã¿ãŠããããã« llama.cpp, GGML ã§äœ¿ãããŠããéåååŠçã¯LLM ã®ãã©ã¡ãŒã¿ã®ããŒã¿ãµã€ãºãåæžããã®ã«å¹æçã§ãã
äžæ¹ãåé è¿°ã¹ãããã« LLM ã¯ããŒã¿ã»ã³ã¿ãŒã§å€§éã®GPUãªãœãŒã¹ã®ããšã§åããã®ã§ããéååã§ãã©ã¡ãŒã¿ã®ããŒã¿ãµã€ãºãåæžã§ãããšããŠããLLM ãèªåè»ã®ãã㪠Edge ç°å¢ã§å®çŸå¯èœãªã®ããšãã課é¡ããããŸããããã§ Turing ã§ã¯ LLM æšè«ã¢ã¯ã»ã©ã¬ãŒã¿ã®éçºãè¡ããŸãã
æ¡çšæ å ±
Turing ã§ã¯èªåé転ã¢ãã«ã®åŠç¿ããLLM æšè«ã¢ã¯ã»ã©ã¬ãŒã¿ã®éçºãªã©ãå®å šèªåé転ã®å®çŸã«å¿ èŠãªæ§ã ãªæè¡éçºãè¡ã£ãŠããŸããèå³ãããæ¹ã¯ãTuring ã®å ¬åŒ Web ãµã€ããæ¡çšæ å ±ãªã©ãã芧ãã ããã話ãèããããšããæ¹ã¯CTOã®éæšããã® X(æ§Twitter) DMãæ¡çšããŒãžã®å¿åãã©ãŒã ããã§ããæ°è»œã«ãé£çµ¡ãã ããã
Discussion