@@ -122,14 +122,15 @@ def test_golden_matches_eager(self) -> None:
122122 weight , scales , group_size = _quant_params (qm )
123123 vocab = weight .shape [0 ]
124124 embed = weight .shape [1 ] * 2
125- # fp64 reference dequant so the oracle carries no fp32 rounding.
126- deq = torch .empty ((vocab , embed ), dtype = torch .float64 )
127- for row in range (vocab ):
128- for d in range (embed ):
129- byte = int (weight [row , d // 2 ])
130- nib = (byte >> 4 ) if (d % 2 == 0 ) else (byte & 0xF )
131- scale = float (scales [row , d // group_size ])
132- deq [row , d ] = (nib - 8 ) * scale
125+ # fp64 reference dequant, vectorized (no fp32 rounding in oracle).
126+ w = weight .to (torch .int64 )
127+ nib = torch .empty ((vocab , embed ), dtype = torch .int64 )
128+ nib [:, 0 ::2 ] = (w >> 4 ) & 0xF # even dim -> high nibble
129+ nib [:, 1 ::2 ] = w & 0xF # odd dim -> low nibble
130+ scale_exp = scales .to (torch .float64 ).repeat_interleave (
131+ group_size , dim = 1
132+ )
133+ deq = (nib - 8 ).to (torch .float64 ) * scale_exp
133134 eager = torch .nn .functional .embedding (idx , deq )
134135 golden = _golden (qm , idx )
135136 torch .testing .assert_close (golden .double (), eager , atol = 1e-5 , rtol = 1e-5 )
0 commit comments