Repository navigation
Expand file tree
/
Copy pathformats.cpp
More file actions
91 lines (80 loc) · 3.94 KB
/
Copy pathformats.cpp
File metadata and controls
91 lines (80 loc) · 3.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "artifact/formats.h"
#include "artifact/schema.h"
#include <array>
namespace ninfer::artifact {
namespace {
constexpr std::array kFormats = {
std::pair{QType::BF16, std::string_view{"bf16"}},
std::pair{QType::FP32, std::string_view{"fp32"}},
std::pair{QType::INT32, std::string_view{"int32"}},
std::pair{QType::Q2_G64_FP16, std::string_view{"q2_g64_fp16"}},
std::pair{QType::Q4_G64_FP16, std::string_view{"q4_g64_fp16"}},
std::pair{QType::Q5_G64_FP16, std::string_view{"q5_g64_fp16"}},
std::pair{QType::Q6_G64_FP16, std::string_view{"q6_g64_fp16"}},
std::pair{QType::Q8_G32_FP16, std::string_view{"q8_g32_fp16"}},
std::pair{QType::T2_G128_FP16, std::string_view{"t2_g128_fp16"}},
std::pair{QType::NVFP4, std::string_view{"nvfp4"}},
std::pair{QType::FP8_E4M3FN_ROW_BF16, std::string_view{"fp8_e4m3fn_row_bf16"}},
std::pair{QType::FP8_E4M3FN_ROW_FP16, std::string_view{"fp8_e4m3fn_row_fp16"}},
std::pair{QType::GGUF_Q8_0, std::string_view{"gguf_q8_0"}},
std::pair{QType::GGUF_Q2_K, std::string_view{"gguf_q2_k"}},
std::pair{QType::GGUF_Q3_K, std::string_view{"gguf_q3_k"}},
std::pair{QType::GGUF_Q4_K, std::string_view{"gguf_q4_k"}},
std::pair{QType::GGUF_Q5_K, std::string_view{"gguf_q5_k"}},
std::pair{QType::GGUF_Q6_K, std::string_view{"gguf_q6_k"}},
std::pair{QType::GGUF_IQ2_XXS, std::string_view{"gguf_iq2_xxs"}},
std::pair{QType::GGUF_IQ2_XS, std::string_view{"gguf_iq2_xs"}},
std::pair{QType::GGUF_IQ2_S, std::string_view{"gguf_iq2_s"}},
std::pair{QType::GGUF_IQ3_XXS, std::string_view{"gguf_iq3_xxs"}},
std::pair{QType::GGUF_IQ3_S, std::string_view{"gguf_iq3_s"}},
std::pair{QType::GGUF_IQ1_S, std::string_view{"gguf_iq1_s"}},
std::pair{QType::GGUF_IQ1_M, std::string_view{"gguf_iq1_m"}},
std::pair{QType::GGUF_IQ4_NL, std::string_view{"gguf_iq4_nl"}},
std::pair{QType::GGUF_IQ4_XS, std::string_view{"gguf_iq4_xs"}},
std::pair{QType::GGUF_Q4_0, std::string_view{"gguf_q4_0"}},
std::pair{QType::GGUF_Q5_0, std::string_view{"gguf_q5_0"}},
std::pair{QType::GGUF_Q2_0, std::string_view{"gguf_q2_0"}},
};
constexpr std::array kLayouts = {
std::pair{QuantLayout::Contiguous, std::string_view{"contiguous_le_v1"}},
std::pair{QuantLayout::RowSplit, std::string_view{"row_split_k128_v1"}},
std::pair{QuantLayout::RowScale, std::string_view{"row_scale_v1"}},
std::pair{QuantLayout::RowInterleaved, std::string_view{"row_interleaved_v1"}},
std::pair{QuantLayout::BlockScaleK16M128x4, std::string_view{"block_scale_k16_m128x4_v1"}},
std::pair{QuantLayout::GgufBlocks, std::string_view{"gguf_blocks_v1"}},
};
// Layouts a device may hold but an artifact may never declare. They are produced by a load-time
// permute, so `parse_layout` deliberately does not see them: a `.ninfer` claiming one would be
// describing bytes the writer could not have produced.
constexpr std::array kDeviceLayouts = {
std::pair{QuantLayout::RowSplitPanel, std::string_view{"row_split_panel4_v1"}},
};
} // namespace
QType parse_format(std::string_view name) {
for (const auto& [format, spelling] : kFormats) {
if (spelling == name) { return format; }
}
throw ArtifactError("unknown tensor format: " + std::string(name));
}
QuantLayout parse_layout(std::string_view name) {
for (const auto& [layout, spelling] : kLayouts) {
if (spelling == name) { return layout; }
}
throw ArtifactError("unknown tensor layout: " + std::string(name));
}
std::string_view format_name(QType format) noexcept {
for (const auto& [value, spelling] : kFormats) {
if (value == format) { return spelling; }
}
return {};
}
std::string_view layout_name(QuantLayout layout) noexcept {
for (const auto& [value, spelling] : kLayouts) {
if (value == layout) { return spelling; }
}
for (const auto& [value, spelling] : kDeviceLayouts) {
if (value == layout) { return spelling; }
}
return {};
}
} // namespace ninfer::artifact