Docs: add instructions for adding backends (#14889)
This commit is contained in:
parent
66906cd82a
commit
446595b9b3
16
docs/ops.md
16
docs/ops.md
|
@ -2,6 +2,11 @@
|
||||||
|
|
||||||
List of GGML operations and backend support status.
|
List of GGML operations and backend support status.
|
||||||
|
|
||||||
|
## How to add a backend to this table:
|
||||||
|
|
||||||
|
1. Run `test-backend-ops support --output csv` with your backend name and redirect output to a csv file in `docs/ops/` (e.g., `docs/ops/CUDA.csv`)
|
||||||
|
2. Regenerate `/docs/ops.md` via `./scripts/create_ops_docs.py`
|
||||||
|
|
||||||
Legend:
|
Legend:
|
||||||
- ✅ Fully supported by this backend
|
- ✅ Fully supported by this backend
|
||||||
- 🟡 Partially supported by this backend
|
- 🟡 Partially supported by this backend
|
||||||
|
@ -18,7 +23,8 @@ Legend:
|
||||||
| ARGSORT | ❌ | ✅ | ✅ | ✅ |
|
| ARGSORT | ❌ | ✅ | ✅ | ✅ |
|
||||||
| CLAMP | ❌ | ✅ | ✅ | 🟡 |
|
| CLAMP | ❌ | ✅ | ✅ | 🟡 |
|
||||||
| CONCAT | ❌ | ✅ | 🟡 | ✅ |
|
| CONCAT | ❌ | ✅ | 🟡 | ✅ |
|
||||||
| CONT | ❌ | ✅ | 🟡 | ✅ |
|
| CONT | ❌ | ✅ | ✅ | ✅ |
|
||||||
|
| CONV_2D | ❌ | ✅ | ❌ | ❌ |
|
||||||
| CONV_2D_DW | ❌ | ✅ | ✅ | ❌ |
|
| CONV_2D_DW | ❌ | ✅ | ✅ | ❌ |
|
||||||
| CONV_TRANSPOSE_1D | ❌ | ✅ | ✅ | ✅ |
|
| CONV_TRANSPOSE_1D | ❌ | ✅ | ✅ | ✅ |
|
||||||
| CONV_TRANSPOSE_2D | ❌ | ✅ | ✅ | ❌ |
|
| CONV_TRANSPOSE_2D | ❌ | ✅ | ✅ | ❌ |
|
||||||
|
@ -30,7 +36,7 @@ Legend:
|
||||||
| DIAG_MASK_INF | ❌ | ✅ | ✅ | 🟡 |
|
| DIAG_MASK_INF | ❌ | ✅ | ✅ | 🟡 |
|
||||||
| DIV | ❌ | ✅ | ✅ | 🟡 |
|
| DIV | ❌ | ✅ | ✅ | 🟡 |
|
||||||
| DUP | ❌ | ✅ | 🟡 | 🟡 |
|
| DUP | ❌ | ✅ | 🟡 | 🟡 |
|
||||||
| ELU | ❌ | ✅ | ❌ | 🟡 |
|
| ELU | ❌ | ✅ | 🟡 | 🟡 |
|
||||||
| EXP | ❌ | ✅ | 🟡 | ❌ |
|
| EXP | ❌ | ✅ | 🟡 | ❌ |
|
||||||
| FLASH_ATTN_EXT | ❌ | ✅ | 🟡 | 🟡 |
|
| FLASH_ATTN_EXT | ❌ | ✅ | 🟡 | 🟡 |
|
||||||
| GATED_LINEAR_ATTN | ❌ | ✅ | ✅ | ❌ |
|
| GATED_LINEAR_ATTN | ❌ | ✅ | ✅ | ❌ |
|
||||||
|
@ -66,14 +72,16 @@ Legend:
|
||||||
| REPEAT_BACK | ❌ | ✅ | ✅ | ❌ |
|
| REPEAT_BACK | ❌ | ✅ | ✅ | ❌ |
|
||||||
| RMS_NORM | ❌ | ✅ | ✅ | 🟡 |
|
| RMS_NORM | ❌ | ✅ | ✅ | 🟡 |
|
||||||
| RMS_NORM_BACK | ❌ | ✅ | ✅ | ❌ |
|
| RMS_NORM_BACK | ❌ | ✅ | ✅ | ❌ |
|
||||||
| RMS_NORM_MUL | ❌ | ✅ | ✅ | ✅ |
|
| RMS_NORM_MUL | ❌ | ❌ | ❌ | ✅ |
|
||||||
|
| RMS_NORM_MUL_ADD | ❌ | ✅ | ✅ | ❌ |
|
||||||
|
| ROLL | ❌ | ✅ | ❌ | ❌ |
|
||||||
| ROPE | ❌ | ✅ | ✅ | ✅ |
|
| ROPE | ❌ | ✅ | ✅ | ✅ |
|
||||||
| ROPE_BACK | ❌ | ✅ | ✅ | ❌ |
|
| ROPE_BACK | ❌ | ✅ | ✅ | ❌ |
|
||||||
| RWKV_WKV6 | ❌ | ✅ | ✅ | ✅ |
|
| RWKV_WKV6 | ❌ | ✅ | ✅ | ✅ |
|
||||||
| RWKV_WKV7 | ❌ | ✅ | ✅ | ✅ |
|
| RWKV_WKV7 | ❌ | ✅ | ✅ | ✅ |
|
||||||
| SCALE | ❌ | ✅ | ✅ | ✅ |
|
| SCALE | ❌ | ✅ | ✅ | ✅ |
|
||||||
| SET | ❌ | ✅ | ❌ | ✅ |
|
| SET | ❌ | ✅ | ❌ | ✅ |
|
||||||
| SET_ROWS | ❌ | 🟡 | ❌ | 🟡 |
|
| SET_ROWS | ❌ | 🟡 | 🟡 | 🟡 |
|
||||||
| SGN | ❌ | ✅ | 🟡 | ❌ |
|
| SGN | ❌ | ✅ | 🟡 | ❌ |
|
||||||
| SIGMOID | ❌ | ✅ | 🟡 | 🟡 |
|
| SIGMOID | ❌ | ✅ | 🟡 | 🟡 |
|
||||||
| SILU | ❌ | ✅ | 🟡 | 🟡 |
|
| SILU | ❌ | ✅ | 🟡 | 🟡 |
|
||||||
|
|
13883
docs/ops/CPU.csv
13883
docs/ops/CPU.csv
File diff suppressed because it is too large
Load Diff
13883
docs/ops/CUDA.csv
13883
docs/ops/CUDA.csv
File diff suppressed because it is too large
Load Diff
|
@ -112,6 +112,11 @@ class DocsGenerator:
|
||||||
lines.append("")
|
lines.append("")
|
||||||
lines.append("List of GGML operations and backend support status.")
|
lines.append("List of GGML operations and backend support status.")
|
||||||
lines.append("")
|
lines.append("")
|
||||||
|
lines.append("## How to add a backend to this table:")
|
||||||
|
lines.append("")
|
||||||
|
lines.append("1. Run `test-backend-ops support --output csv` with your backend name and redirect output to a csv file in `docs/ops/` (e.g., `docs/ops/CUDA.csv`)")
|
||||||
|
lines.append("2. Regenerate `/docs/ops.md` via `./scripts/create_ops_docs.py`")
|
||||||
|
lines.append("")
|
||||||
lines.append("Legend:")
|
lines.append("Legend:")
|
||||||
lines.append("- ✅ Fully supported by this backend")
|
lines.append("- ✅ Fully supported by this backend")
|
||||||
lines.append("- 🟡 Partially supported by this backend")
|
lines.append("- 🟡 Partially supported by this backend")
|
||||||
|
|
|
@ -868,16 +868,30 @@ struct sql_printer : public printer {
|
||||||
|
|
||||||
struct csv_printer : public printer {
|
struct csv_printer : public printer {
|
||||||
void print_header() override {
|
void print_header() override {
|
||||||
std::vector<std::string> fields = test_result::get_fields();
|
|
||||||
|
std::vector<std::string> fields = test_result::get_fields();
|
||||||
|
std::vector<std::string> fields_csv = get_fields_csv();
|
||||||
for (size_t i = 0; i < fields.size(); i++) {
|
for (size_t i = 0; i < fields.size(); i++) {
|
||||||
|
if (std::find(std::begin(fields_csv), std::end(fields_csv), fields[i]) == std::end(fields_csv)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
printf("\"%s\"%s", fields[i].c_str(), i < fields.size() - 1 ? "," : "");
|
printf("\"%s\"%s", fields[i].c_str(), i < fields.size() - 1 ? "," : "");
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_test_result(const test_result & result) override {
|
void print_test_result(const test_result & result) override {
|
||||||
std::vector<std::string> values = result.get_values();
|
|
||||||
|
std::vector<std::string> values = result.get_values();
|
||||||
|
std::vector<std::string> fields = test_result::get_fields();
|
||||||
|
std::vector<std::string> fields_csv = get_fields_csv();
|
||||||
|
|
||||||
for (size_t i = 0; i < values.size(); i++) {
|
for (size_t i = 0; i < values.size(); i++) {
|
||||||
|
|
||||||
|
if (std::find(std::begin(fields_csv), std::end(fields_csv), fields[i]) == std::end(fields_csv)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Escape quotes and wrap in quotes for CSV
|
// Escape quotes and wrap in quotes for CSV
|
||||||
std::string escaped_value = values[i];
|
std::string escaped_value = values[i];
|
||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
|
@ -889,6 +903,19 @@ struct csv_printer : public printer {
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::vector<std::string> get_fields_csv() {
|
||||||
|
return {
|
||||||
|
"op_name",
|
||||||
|
"op_params",
|
||||||
|
"supported",
|
||||||
|
"error_message",
|
||||||
|
"test_mode",
|
||||||
|
"backend_reg_name",
|
||||||
|
"backend_name",
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::unique_ptr<printer> create_printer(output_formats format) {
|
static std::unique_ptr<printer> create_printer(output_formats format) {
|
||||||
|
|
Loading…
Reference in New Issue