本發(fā)明涉及深度學(xué)習(xí),特別是涉及一種數(shù)據(jù)反量化方法、裝置、設(shè)備和計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。
背景技術(shù):
1、模型量化是深度學(xué)習(xí)領(lǐng)域中一種常見的技術(shù),用于減少模型的大小和計(jì)算資源的需求,從而提高模型的運(yùn)行效率。模型量化是指將神經(jīng)網(wǎng)絡(luò)模型中的參數(shù)從高精度的浮點(diǎn)數(shù)轉(zhuǎn)換為低精度的整數(shù)的過程。常見的高精度的浮點(diǎn)數(shù)包括fp32、fp16;低精度的整數(shù)包括int8、int4等。反量化是模型推理過程中的重要步驟,當(dāng)完成部署后的模型執(zhí)行推理時(shí)需要通過反量化將量化后的低精度整數(shù)參數(shù)轉(zhuǎn)換回高精度的浮點(diǎn)數(shù)參數(shù)。
2、int8在大多數(shù)硬件平臺(tái)上是一個(gè)標(biāo)準(zhǔn)的數(shù)據(jù)類型,因此8bit量化得到了廣泛應(yīng)用。為了進(jìn)一步降低模型的存儲(chǔ)需求和計(jì)算復(fù)雜度,進(jìn)一步發(fā)展出了4bit量化。8bit量化和4bit量化的實(shí)現(xiàn)難度并無差異。但是量化后模型部署的硬件平臺(tái)多種多樣,并不是所有的硬件平臺(tái)都支持4bit計(jì)算。
3、可見,如何在不支持4bit數(shù)據(jù)類型的處理器上實(shí)現(xiàn)4bit反量化,從而充分發(fā)揮4bit量化占用存儲(chǔ)空間小和計(jì)算效率高的優(yōu)勢,是本領(lǐng)域技術(shù)人員需要解決的問題。
技術(shù)實(shí)現(xiàn)思路
1、本發(fā)明實(shí)施例的目的是提供一種數(shù)據(jù)反量化方法、裝置、設(shè)備和計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),可以解決4bit量化在不支持4bit數(shù)據(jù)類型的硬件平臺(tái)上的應(yīng)用問題。
2、為解決上述技術(shù)問題,本發(fā)明實(shí)施例提供一種數(shù)據(jù)反量化方法,包括:
3、在反量化計(jì)算未完成的情況下,根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的位置信息,從緩存中讀取出int4類型的偏置;根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的位置信息,從緩存中讀取出fp16類型的量化系數(shù);
4、在未讀取出當(dāng)前組內(nèi)所有int4類型的權(quán)重的情況下,根據(jù)int4類型的權(quán)重對應(yīng)的位置信息,從緩存中讀取int4類型的權(quán)重;
5、在讀取出當(dāng)前組內(nèi)所有int4類型的權(quán)重的情況下,按照反量化處理規(guī)則,對當(dāng)前組內(nèi)所有int4類型的權(quán)重、int4類型的偏置以及fp16類型的量化系數(shù)進(jìn)行處理,以得到當(dāng)前組對應(yīng)的反量化結(jié)果;
6、在當(dāng)前組不為最后一組的情況下,將下一組的各類型數(shù)據(jù)對應(yīng)的位置信息作為最新的當(dāng)前組的各類型數(shù)據(jù)的位置信息,并返回根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的位置信息,從緩存中讀取出int4類型的偏置;根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的位置信息,從緩存中讀取出fp16類型的量化系數(shù)的步驟,直至完成所述緩存中所有數(shù)據(jù)的反量化計(jì)算;其中,各類數(shù)據(jù)至少包括int4類型的偏置、fp16類型的量化系數(shù)和int4類型的權(quán)重。
7、一方面,根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的位置信息,從緩存中讀取出int4類型的偏置;根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的位置信息,從緩存中讀取出fp16類型的量化系數(shù)包括:
8、根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的起始地址和起始偏移,從緩存中讀取出當(dāng)前組的int4類型的偏置,并存儲(chǔ)當(dāng)前組的int4類型的偏置;
9、根據(jù)當(dāng)前組的int4類型的偏置的累加地址,確定出下一組的int4類型的偏置對應(yīng)的地址和偏移;
10、根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的起始地址和起始偏移,讀取出當(dāng)前組的fp16類型的量化系數(shù),并存儲(chǔ)當(dāng)前組的fp16類型的量化系數(shù);
11、根據(jù)當(dāng)前組的fp16類型的量化系數(shù)的累加地址,確定出下一組的fp16類型的量化系數(shù)對應(yīng)的地址和偏移。
12、一方面,在未讀取出當(dāng)前組內(nèi)所有int4類型的權(quán)重的情況下,根據(jù)int4類型的權(quán)重對應(yīng)的位置信息,從緩存中讀取int4類型的權(quán)重包括:
13、根據(jù)int4類型的權(quán)重對應(yīng)的起始地址和起始偏移,從緩存中讀取當(dāng)前組包含的int4類型的權(quán)重,并存儲(chǔ)當(dāng)前組的int4類型的權(quán)重;
14、根據(jù)當(dāng)前組的int4類型的權(quán)重的累加地址,計(jì)算出下一組int4類型的權(quán)重對應(yīng)的地址和偏移。
15、一方面,按照反量化處理規(guī)則,對當(dāng)前組內(nèi)所有int4類型的權(quán)重、int4類型的偏置以及fp16類型的量化系數(shù)進(jìn)行處理,以得到當(dāng)前組對應(yīng)的反量化結(jié)果包括:
16、將int4類型的權(quán)重轉(zhuǎn)換為int8類型的權(quán)重;其中,int8類型的權(quán)重包括高位int8類型的權(quán)重和低位int8類型的權(quán)重;
17、將int4類型的偏置轉(zhuǎn)換為int8類型的偏置;其中,int8類型的偏置包括高位int8類型的偏置和低位int8類型的偏置;
18、根據(jù)向量減法指令,計(jì)算所述低位int8類型的權(quán)重和所述低位int8類型的偏置的int8類型的第一差數(shù)據(jù);
19、調(diào)用數(shù)據(jù)類型轉(zhuǎn)換指令,將所述第一差數(shù)據(jù)中低256bit數(shù)據(jù)轉(zhuǎn)換為fp16類型的第一低位數(shù)據(jù),并存儲(chǔ)fp16類型的第一低位數(shù)據(jù);
20、根據(jù)移位指令,將所述第一差數(shù)據(jù)右移256bit,并將右移后的第一差數(shù)據(jù)轉(zhuǎn)換為fp16類型的第一高位數(shù)據(jù),并存儲(chǔ)fp16類型的第一高位數(shù)據(jù);
21、根據(jù)向量減法指令,計(jì)算所述高位int8類型的權(quán)重和所述高位int8類型的偏置的int8類型的第二差數(shù)據(jù);
22、調(diào)用數(shù)據(jù)類型轉(zhuǎn)換指令,將所述第二差數(shù)據(jù)中低256bit數(shù)據(jù)轉(zhuǎn)換為fp16類型的第二低位數(shù)據(jù),并存儲(chǔ)fp16類型的第二低位數(shù)據(jù);
23、根據(jù)移位指令,將所述第二差數(shù)據(jù)右移256bit,并將右移后的第二差數(shù)據(jù)轉(zhuǎn)換為fp16類型的第二高位數(shù)據(jù),并存儲(chǔ)fp16類型的第二高位數(shù)據(jù);
24、計(jì)算fp16類型的量化系數(shù)與其對應(yīng)的fp16類型的數(shù)據(jù)的乘積,將各乘積值作為各組對應(yīng)的反量化結(jié)果,并存儲(chǔ)各組對應(yīng)的反量化結(jié)果。
25、一方面,將int4類型的權(quán)重轉(zhuǎn)換為int8類型的權(quán)重包括:
26、將int4類型的權(quán)重中的512bit數(shù)據(jù)解析為64個(gè)int8類型的權(quán)重;
27、按照向量右移指令,將各int8類型的權(quán)重右移并存儲(chǔ)右移后得到的高位int8類型的權(quán)重;
28、按照向量左移指令,將各int8類型的權(quán)重執(zhí)行左移;
29、按照向量右移指令,將左移后的各int8類型的權(quán)重執(zhí)行右移,并存儲(chǔ)右移后得到的低位int8類型的權(quán)重。
30、一方面,將int4類型的偏置轉(zhuǎn)換為int8類型的偏置包括:
31、將int4類型的偏置中的512bit數(shù)據(jù)解析為64個(gè)int8類型的偏置;
32、按照向量右移指令,將各int8類型的偏置右移并存儲(chǔ)右移后得到的高位int8類型的偏置;
33、按照向量左移指令,將各int8類型的偏置執(zhí)行左移;
34、按照向量右移指令,將左移后的各int8類型的偏置執(zhí)行右移,并存儲(chǔ)右移后得到的低位int8類型的偏置。
35、一方面,計(jì)算fp16類型的量化系數(shù)與其對應(yīng)的fp16類型的數(shù)據(jù)的乘積,將各乘積值作為各組對應(yīng)的反量化結(jié)果,并存儲(chǔ)各組對應(yīng)的反量化結(jié)果包括:
36、計(jì)算fp16類型的量化系數(shù)與fp16類型的第一低位數(shù)據(jù)的乘積,將乘積值作為第一組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第一組對應(yīng)的反量化結(jié)果;
37、計(jì)算fp16類型的量化系數(shù)與fp16類型的第一高位數(shù)據(jù)的乘積,將乘積值作為第二組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第二組對應(yīng)的反量化結(jié)果;
38、計(jì)算fp16類型的量化系數(shù)與fp16類型的第二低位數(shù)據(jù)的乘積,將乘積值作為第三組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第三組對應(yīng)的反量化結(jié)果;
39、計(jì)算fp16類型的量化系數(shù)與fp16類型的第二高位數(shù)據(jù)的乘積,將乘積值作為第四組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第四組對應(yīng)的反量化結(jié)果。
40、本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)反量化裝置,包括第一讀取單元、第二讀取單元、反量化單元和作為單元;
41、所述第一讀取單元,用于在反量化計(jì)算未完成的情況下,根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的位置信息,從緩存中讀取出int4類型的偏置;根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的位置信息,從緩存中讀取出fp16類型的量化系數(shù);
42、所述第二讀取單元,用于在未讀取出當(dāng)前組內(nèi)所有int4類型的權(quán)重的情況下,根據(jù)int4類型的權(quán)重對應(yīng)的位置信息,從緩存中讀取int4類型的權(quán)重;
43、所述反量化單元,用于在讀取出當(dāng)前組內(nèi)所有int4類型的權(quán)重的情況下,按照反量化處理規(guī)則,對當(dāng)前組內(nèi)所有int4類型的權(quán)重、int4類型的偏置以及fp16類型的量化系數(shù)進(jìn)行處理,以得到當(dāng)前組對應(yīng)的反量化結(jié)果;
44、所述作為單元,用于在當(dāng)前組不為最后一組的情況下,將下一組的各類型數(shù)據(jù)對應(yīng)的位置信息作為最新的當(dāng)前組的各類型數(shù)據(jù)的位置信息,并返回根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的位置信息,從緩存中讀取出int4類型的偏置;根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的位置信息,從緩存中讀取出fp16類型的量化系數(shù)的步驟,直至完成所述緩存中所有數(shù)據(jù)的反量化計(jì)算;其中,各類數(shù)據(jù)至少包括int4類型的偏置、fp16類型的量化系數(shù)和int4類型的權(quán)重。
45、一方面,所述第一讀取單元用于根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的起始地址和起始偏移,從緩存中讀取出當(dāng)前組的int4類型的偏置,并存儲(chǔ)當(dāng)前組的int4類型的偏置;
46、根據(jù)當(dāng)前組的int4類型的偏置的累加地址,確定出下一組的int4類型的偏置對應(yīng)的地址和偏移;
47、根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的起始地址和起始偏移,讀取出當(dāng)前組的fp16類型的量化系數(shù),并存儲(chǔ)當(dāng)前組的fp16類型的量化系數(shù);
48、根據(jù)當(dāng)前組的fp16類型的量化系數(shù)的累加地址,確定出下一組的fp16類型的量化系數(shù)對應(yīng)的地址和偏移。
49、一方面,所述第二讀取單元用于根據(jù)int4類型的權(quán)重對應(yīng)的起始地址和起始偏移,從緩存中讀取當(dāng)前組包含的int4類型的權(quán)重,并存儲(chǔ)當(dāng)前組的int4類型的權(quán)重;
50、根據(jù)當(dāng)前組的int4類型的權(quán)重的累加地址,計(jì)算出下一組int4類型的權(quán)重對應(yīng)的地址和偏移。
51、一方面,所述反量化單元包括第一轉(zhuǎn)換子單元、第二轉(zhuǎn)換子單元、第一相減子單元、第三轉(zhuǎn)換子單元、第一保存子單元、第一移位子單元、第四轉(zhuǎn)換子單元、第二保存子單元、第二相減子單元、第五轉(zhuǎn)換子單元、第三保存子單元、第二移位子單元、第六轉(zhuǎn)換子單元、第四保存子單元和相乘子單元;
52、所述第一轉(zhuǎn)換子單元,用于將int4類型的權(quán)重轉(zhuǎn)換為int8類型的權(quán)重;其中,int8類型的權(quán)重包括高位int8類型的權(quán)重和低位int8類型的權(quán)重;
53、所述第二轉(zhuǎn)換子單元,用于將int4類型的偏置轉(zhuǎn)換為int8類型的偏置;其中,int8類型的偏置包括高位int8類型的偏置和低位int8類型的偏置;
54、所述第一相減子單元,用于根據(jù)向量減法指令,計(jì)算所述低位int8類型的權(quán)重和所述低位int8類型的偏置的int8類型的第一差數(shù)據(jù);
55、所述第三轉(zhuǎn)換子單元,用于調(diào)用數(shù)據(jù)類型轉(zhuǎn)換指令,將所述第一差數(shù)據(jù)中低256bit數(shù)據(jù)轉(zhuǎn)換為fp16類型的第一低位數(shù)據(jù);
56、所述第一保存子單元,用于存儲(chǔ)fp16類型的第一低位數(shù)據(jù);
57、所述第一移位子單元,用于根據(jù)移位指令,將所述第一差數(shù)據(jù)右移256bit;
58、所述第四轉(zhuǎn)換子單元,用于將右移后的第一差數(shù)據(jù)轉(zhuǎn)換為fp16類型的第一高位數(shù)據(jù);
59、所述第二保存子單元,用于存儲(chǔ)fp16類型的第一高位數(shù)據(jù);
60、所述第二相減子單元,用于根據(jù)向量減法指令,計(jì)算所述高位int8類型的權(quán)重和所述高位int8類型的偏置的int8類型的第二差數(shù)據(jù);
61、所述第五轉(zhuǎn)換子單元,用于調(diào)用數(shù)據(jù)類型轉(zhuǎn)換指令,將所述第二差數(shù)據(jù)中低256bit數(shù)據(jù)轉(zhuǎn)換為fp16類型的第二低位數(shù)據(jù);
62、所述第三保存子單元,用于存儲(chǔ)fp16類型的第二低位數(shù)據(jù);
63、所述第二移位子單元,用于根據(jù)移位指令,將所述第二差數(shù)據(jù)右移256bit;
64、所述第六轉(zhuǎn)換子單元,用于將右移后的第二差數(shù)據(jù)轉(zhuǎn)換為fp16類型的第二高位數(shù)據(jù);
65、所述第四保存子單元,用于存儲(chǔ)fp16類型的第二高位數(shù)據(jù);
66、所述相乘子單元,用于計(jì)算fp16類型的量化系數(shù)與其對應(yīng)的fp16類型的數(shù)據(jù)的乘積,將各乘積值作為各組對應(yīng)的反量化結(jié)果,并存儲(chǔ)各組對應(yīng)的反量化結(jié)果。
67、一方面,所述第一轉(zhuǎn)換子單元用于將int4類型的權(quán)重中的512bit數(shù)據(jù)解析為64個(gè)int8類型的權(quán)重;
68、按照向量右移指令,將各int8類型的權(quán)重右移并存儲(chǔ)右移后得到的高位int8類型的權(quán)重;
69、按照向量左移指令,將各int8類型的權(quán)重執(zhí)行左移;
70、按照向量右移指令,將左移后的各int8類型的權(quán)重執(zhí)行右移,并存儲(chǔ)右移后得到的低位int8類型的權(quán)重。
71、一方面,所述第二轉(zhuǎn)換子單元用于將int4類型的偏置中的512bit數(shù)據(jù)解析為64個(gè)int8類型的偏置;
72、按照向量右移指令,將各int8類型的偏置右移并存儲(chǔ)右移后得到的高位int8類型的偏置;
73、按照向量左移指令,將各int8類型的偏置執(zhí)行左移;
74、按照向量右移指令,將左移后的各int8類型的偏置執(zhí)行右移,并存儲(chǔ)右移后得到的低位int8類型的偏置。
75、一方面,所述相乘子單元用于計(jì)算fp16類型的量化系數(shù)與p16類型的第一低位數(shù)據(jù)的乘積,將乘積值作為第一組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第一組對應(yīng)的反量化結(jié)果;
76、計(jì)算fp16類型的量化系數(shù)與fp16類型的第一高位數(shù)據(jù)的乘積,將乘積值作為第二組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第二組對應(yīng)的反量化結(jié)果;
77、計(jì)算fp16類型的量化系數(shù)與fp16類型的第二低位數(shù)據(jù)的乘積,將乘積值作為第三組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第三組對應(yīng)的反量化結(jié)果;
78、計(jì)算fp16類型的量化系數(shù)與fp16類型的第二高位數(shù)據(jù)的乘積,將乘積值作為第四組對應(yīng)的反量化結(jié)果,并存儲(chǔ)第四組對應(yīng)的反量化結(jié)果。
79、本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)反量化設(shè)備,包括:
80、存儲(chǔ)器,用于存儲(chǔ)計(jì)算機(jī)程序;
81、處理器,用于執(zhí)行所述計(jì)算機(jī)程序以實(shí)現(xiàn)如上述數(shù)據(jù)反量化方法的步驟。
82、本發(fā)明實(shí)施例還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上存儲(chǔ)有計(jì)算機(jī)程序,所述計(jì)算機(jī)程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如上述數(shù)據(jù)反量化方法的步驟。
83、本發(fā)明實(shí)施例還提供了一種計(jì)算機(jī)程序產(chǎn)品,包括計(jì)算機(jī)程序/指令,該計(jì)算機(jī)程序/指令被處理器執(zhí)行時(shí)實(shí)現(xiàn)上述數(shù)據(jù)反量化方法的步驟。
84、由上述技術(shù)方案可以看出,在反量化計(jì)算未完成的情況下,根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的位置信息,從緩存中讀取出int4類型的偏置;根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的位置信息,從緩存中讀取出fp16類型的量化系數(shù)。在未讀取出當(dāng)前組內(nèi)所有int4類型的權(quán)重的情況下,根據(jù)int4類型的權(quán)重對應(yīng)的位置信息,從緩存中讀取int4類型的權(quán)重。在讀取出當(dāng)前組內(nèi)所有int4類型的權(quán)重的情況下,說明當(dāng)前組對應(yīng)的數(shù)據(jù)已經(jīng)讀取完畢,此時(shí)可以按照反量化處理規(guī)則,對當(dāng)前組內(nèi)所有int4類型的權(quán)重、int4類型的偏置以及fp16類型的量化系數(shù)進(jìn)行處理,以得到當(dāng)前組對應(yīng)的反量化結(jié)果。在當(dāng)前組不為最后一組的情況下,將下一組的各類型數(shù)據(jù)對應(yīng)的位置信息作為最新的當(dāng)前組的各類型數(shù)據(jù)的位置信息,并返回根據(jù)當(dāng)前組的int4類型的偏置對應(yīng)的位置信息,從緩存中讀取出int4類型的偏置;根據(jù)當(dāng)前組的fp16類型的量化系數(shù)對應(yīng)的位置信息,從緩存中讀取出fp16類型的量化系數(shù)的步驟,直至完成緩存中所有數(shù)據(jù)的反量化計(jì)算;其中,各類數(shù)據(jù)至少包括int4類型的偏置、fp16類型的量化系數(shù)和int4類型的權(quán)重。本發(fā)明的有益效果在于,通過循環(huán)的方式可以依次獲取執(zhí)行反量化操作所需的數(shù)據(jù),包括同一組內(nèi)int4類型的偏置、fp16類型的量化系數(shù)以及int4類型的權(quán)重。依據(jù)int4類型的數(shù)據(jù)存儲(chǔ)方式設(shè)置反量化處理規(guī)則,可以在不支持4bit數(shù)據(jù)類型的處理器上實(shí)現(xiàn)4bit反量化,從而充分發(fā)揮4bit量化占用存儲(chǔ)空間小和計(jì)算效率高的優(yōu)勢。