Kernels:
Trusted publisher
Uploaded using `kernel-builder`.
Browse files- build/torch213-metal-aarch64-darwin/__init__.py +98 -0
- build/torch213-metal-aarch64-darwin/_ggml_quantization_metal_89d4054.abi3.so +3 -0
- build/torch213-metal-aarch64-darwin/_ops.py +9 -0
- build/torch213-metal-aarch64-darwin/metadata.json +31 -0
- build/torch213-metal-aarch64-darwin/metadata.json.sigstore +1 -0
- build/torch214-metal-aarch64-darwin/__init__.py +98 -0
- build/torch214-metal-aarch64-darwin/_ggml_quantization_metal_89d4054.abi3.so +3 -0
- build/torch214-metal-aarch64-darwin/_ops.py +9 -0
- build/torch214-metal-aarch64-darwin/metadata.json +31 -0
- build/torch214-metal-aarch64-darwin/metadata.json.sigstore +1 -0
build/torch213-metal-aarch64-darwin/__init__.py
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Compute directly on the packed blocks of a GGUF checkpoint.
|
| 2 |
+
|
| 3 |
+
A GGUF weight is stored as blocks of 32 or 256 values sharing a scale. These kernels read that
|
| 4 |
+
layout as it is, so a quantized model can be loaded and run without ever materializing a dense
|
| 5 |
+
copy — which is the whole memory saving.
|
| 6 |
+
|
| 7 |
+
Ported from llama.cpp's ggml-cuda; `vendor/UPSTREAM` pins the revision. The ops are named for what
|
| 8 |
+
they do rather than for a backend: each backend registers its own implementation of the same
|
| 9 |
+
schema, so calls dispatch on the tensor's device.
|
| 10 |
+
"""
|
| 11 |
+
|
| 12 |
+
import torch
|
| 13 |
+
|
| 14 |
+
from ._ops import add_op_namespace_prefix, ops
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
__all__ = ["GEMV_TYPES", "MAX_GEMV_ROWS", "dequantize", "get_rows", "mul_mat_id", "mul_mat_vec"]
|
| 18 |
+
|
| 19 |
+
# Upstream's MMVQ_MAX_BATCH_SIZE: `mul_mat_vec` has no implementation beyond this many rows, so a
|
| 20 |
+
# caller with more (prefill) dequantizes and uses an ordinary matmul.
|
| 21 |
+
MAX_GEMV_ROWS = 8
|
| 22 |
+
|
| 23 |
+
# ggml type ids `mul_mat_vec` implements, as this build reports them -- it is backend-specific, and
|
| 24 |
+
# a type routed into a gemv that has no kernel for it is a fault, not a fallback. CUDA covers
|
| 25 |
+
# Q4_0/Q4_1/Q5_0/Q5_1/Q8_0, the K quants, the IQ quants, MXFP4/NVFP4 and Q1_0/Q2_0; Metal is the
|
| 26 |
+
# same minus NVFP4/Q1_0/Q2_0, which its metallib has no kernels for. `dequantize` covers more, so
|
| 27 |
+
# check this before choosing the fused path.
|
| 28 |
+
try:
|
| 29 |
+
GEMV_TYPES = frozenset(ops.gemv_types())
|
| 30 |
+
except AttributeError:
|
| 31 |
+
# A build published before `gemv_types` existed; those are CUDA-only, so its list is theirs.
|
| 32 |
+
GEMV_TYPES = frozenset({2, 3, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 29, 39, 40, 41, 42})
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
def get_rows(
|
| 36 |
+
blocks: torch.Tensor, indices: torch.Tensor, ggml_type: int, cols: int, dtype: torch.dtype
|
| 37 |
+
) -> torch.Tensor:
|
| 38 |
+
"""The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.
|
| 39 |
+
|
| 40 |
+
ggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table
|
| 41 |
+
never touches the rest.
|
| 42 |
+
"""
|
| 43 |
+
return ops.get_rows(blocks, indices, ggml_type, cols, dtype)
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def dequantize(
|
| 47 |
+
blocks: torch.Tensor, ggml_type: int, rows: int, cols: int, dtype: torch.dtype
|
| 48 |
+
) -> torch.Tensor:
|
| 49 |
+
"""`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`."""
|
| 50 |
+
return ops.dequantize(blocks, ggml_type, rows, cols, dtype)
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def mul_mat_vec(
|
| 54 |
+
blocks: torch.Tensor, x: torch.Tensor, ggml_type: int, out_features: int
|
| 55 |
+
) -> torch.Tensor:
|
| 56 |
+
"""Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.
|
| 57 |
+
|
| 58 |
+
`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32
|
| 59 |
+
whatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,
|
| 60 |
+
where the cast can be fused into whatever consumes it.
|
| 61 |
+
"""
|
| 62 |
+
return ops.mul_mat_vec(blocks, x, ggml_type, out_features)
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
def mul_mat_id(
|
| 66 |
+
blocks: torch.Tensor, x: torch.Tensor, ids: torch.Tensor, ggml_type: int, out_features: int
|
| 67 |
+
) -> torch.Tensor:
|
| 68 |
+
"""One dispatch for a bank of routed experts: ggml's `mul_mv_id`.
|
| 69 |
+
|
| 70 |
+
`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and
|
| 71 |
+
`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is
|
| 72 |
+
`(n_tokens, n_used, out_features)` f32, one row per slot.
|
| 73 |
+
|
| 74 |
+
The alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch
|
| 75 |
+
around it -- which is most of what a MoE decode step costs.
|
| 76 |
+
"""
|
| 77 |
+
return ops.mul_mat_id(blocks, x, ids, ggml_type, out_features)
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
# Without these, torch.compile cannot trace the ops and breaks the graph at every call.
|
| 81 |
+
@torch.library.register_fake(add_op_namespace_prefix("get_rows"))
|
| 82 |
+
def _get_rows_fake(blocks, indices, ggml_type, cols, dtype):
|
| 83 |
+
return blocks.new_empty((indices.numel(), cols), dtype=dtype)
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
@torch.library.register_fake(add_op_namespace_prefix("dequantize"))
|
| 87 |
+
def _dequantize_fake(blocks, ggml_type, rows, cols, dtype):
|
| 88 |
+
return blocks.new_empty((rows, cols), dtype=dtype)
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
@torch.library.register_fake(add_op_namespace_prefix("mul_mat_vec"))
|
| 92 |
+
def _mul_mat_vec_fake(blocks, x, ggml_type, out_features):
|
| 93 |
+
return x.new_empty((x.shape[0], out_features), dtype=torch.float32)
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
@torch.library.register_fake(add_op_namespace_prefix("mul_mat_id"))
|
| 97 |
+
def _mul_mat_id_fake(blocks, x, ids, ggml_type, out_features):
|
| 98 |
+
return x.new_empty((x.shape[0], ids.shape[1], out_features), dtype=torch.float32)
|
build/torch213-metal-aarch64-darwin/_ggml_quantization_metal_89d4054.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:041bf9deaf05d07e5dc3e4243e9dac646168dff932277321613d107e9b49b12f
|
| 3 |
+
size 3347416
|
build/torch213-metal-aarch64-darwin/_ops.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch
|
| 2 |
+
from . import _ggml_quantization_metal_89d4054
|
| 3 |
+
ops = torch.ops._ggml_quantization_metal_89d4054
|
| 4 |
+
|
| 5 |
+
def add_op_namespace_prefix(op_name: str):
|
| 6 |
+
"""
|
| 7 |
+
Prefix op by namespace.
|
| 8 |
+
"""
|
| 9 |
+
return f"_ggml_quantization_metal_89d4054::{op_name}"
|
build/torch213-metal-aarch64-darwin/metadata.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "ggml-quantization",
|
| 3 |
+
"id": "_ggml_quantization_metal_89d4054",
|
| 4 |
+
"version": 1,
|
| 5 |
+
"kernels-minver": "0.14.0",
|
| 6 |
+
"license": "MIT",
|
| 7 |
+
"python-depends": [],
|
| 8 |
+
"kernel-depends": [],
|
| 9 |
+
"backend": {
|
| 10 |
+
"type": "metal"
|
| 11 |
+
},
|
| 12 |
+
"digest": {
|
| 13 |
+
"algorithm": "sha256",
|
| 14 |
+
"files": {
|
| 15 |
+
"__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
|
| 16 |
+
"_ggml_quantization_metal_89d4054.abi3.so": "BBv53q8F0H5dw+QkPp2sZGFo3/kyJ3MhYT0QfptJsS8=",
|
| 17 |
+
"_ops.py": "ew+H7hL0NOlOBWz6GG+QWjw5aXEmVHb4x0E2vnbgJiw="
|
| 18 |
+
}
|
| 19 |
+
},
|
| 20 |
+
"provenance": {
|
| 21 |
+
"kernel-builder": {
|
| 22 |
+
"version": "0.17.0-dev0",
|
| 23 |
+
"commit": "a7f0afdb29a6a3372b1d47180cc0c182454c5e3b",
|
| 24 |
+
"dirty": false
|
| 25 |
+
},
|
| 26 |
+
"kernel": {
|
| 27 |
+
"commit": "89d4054f3755039d5474cfed03f06de026ee2ce7",
|
| 28 |
+
"dirty": false
|
| 29 |
+
}
|
| 30 |
+
}
|
| 31 |
+
}
|
build/torch213-metal-aarch64-darwin/metadata.json.sigstore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHYzCCBuigAwIBAgIUSklPWP+MFcFUBj0b5q+ylqu61cMwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwOTA3MDkyOTIxWhcNMjYwOTA3MDkzOTIxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMPnfhvcEQeRVPQcg79ZVJJfX4c3PIs50Ob3I2+m5PDOFbRfhvOsPtDd38aZXzr2keYT7yWQnIli1oQp8hKjDFKOCBgcwggYDMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUnAixC7UMdA/UjfI/40H3BcJZo8AwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wbwYDVR0RAQH/BGUwY4ZhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDg5ZDQwNTRmMzc1NTAzOWQ1NDc0Y2ZlZDAzZjA2ZGUwMjZlZTJjZTcwGwYKKwYBBAGDvzABBAQNQnVpbGQgKG1hY09TKTArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHEGCisGAQQBg78wAQkEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAEKBCoMKDg5ZDQwNTRmMzc1NTAzOWQ1NDc0Y2ZlZDAzZjA2ZGUwMjZlZTJjZTcwHQYKKwYBBAGDvzABCwQPDA1naXRodWItaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoODlkNDA1NGYzNzU1MDM5ZDU0NzRjZmVkMDNmMDZkZTAyNmVlMmNlNzAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBxBgorBgEEAYO/MAESBGMMYWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC1tYWMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4OWQ0MDU0ZjM3NTUwMzlkNTQ3NGNmZWQwM2YwNmRlMDI2ZWUyY2U3MCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzM0MTAzMjEyMDczL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYsGCisGAQQB1nkCBAIEfQR7AHkAdwDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAaB7M2YEAAAEAwBIMEYCIQCBY53MQI7edPF0rYRfb/inqWf22k0l0+5aITBO7HZjaQIhAJN/VzbDAoOPtku5iGsab66yOcp750YxqkNOuCrmFpbfMAoGCCqGSM49BAMDA2kAMGYCMQDmEO9yeEIFRdtV+oP6Nho6PuR0ERehJonSMwGlMHedjv5jOr2gINBmj1DZpOnOnmICMQDJ2cbAYErJOzfKOVZ49otCDU7/YwPRw0HCoZoc1/Qocwff5e/dBrN1qPJizHFHcQQ="},"tlogEntries":[{"logIndex":"2749091343","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1788773361","inclusionPromise":{"signedEntryTimestamp":"MEQCIG1L++zZ8HC9wbNBOnOLTmK5y/4iXHGOVWN8x3bIZ7/ZAiAa7EXIKf28HsXTN+nau7BOmSf1/57fkOYAQqSVKtq1ww=="},"inclusionProof":{"logIndex":"2627187081","rootHash":"Mb8C6uZwsvvhJ9YUAtLrc/p8b71PxKyS7VtlxPMRo4Y=","treeSize":"2627187086","hashes":["az1CvEhYWuONAM4fmBtra4nyvNf527D4yGuzEdQlHF0=","nAK+69gnK6Q25/OuUAlS6VB6OFS3JVcdMQ4qKXfhEiw=","8H8z82t/Kzdkbebc58GFDVmSkWgUdsxBoE0mTAK7s/A=","cCTbRmrUK+UKvmC0PgtZ2v8QCnFYyUZdvyT6zfiu600=","5FekOd6psbPl/YW8BqZCB3Pr+vCyrWmIAfp6jy/vCu8=","mpoeA3EdQH3o2ihlvgdVhT8DE6i2AxIHQfLU1M43Y4w=","07mlDNXqAVPo5En9eeaRR+4iOZLmrRpJoNfpWM2F5Vo=","X+ms4agRFYCrdym7/FHw+/rErgJ/EFH6xKC650WNzCU=","rC7UvsBWtIMUY1hF7VAc1IuD9m+gPgcwdArHV3COAxg=","ch0aD372ymT2fXHxbf+epFKHoFZu8e2qER+xxSCbPyc=","yLcHDDCEu1BAK+IfkRJ79X8cbQ0Ewt8a51AAHz4ItBA=","sFs5ZPVs0GrIELeO+PLKnaw6Xqx6rrLLSsxTCL7uEy4=","PeXZrqD3jq5qFdOmhUHJ8en1qzGlcp6bfMESzIwc3z0=","lKSWYj364IeG0b10DY/iYLgSeWiNkybEZLzd49gUFSo=","7tD2K8mAqGTMENrP2YXWz71BeTWQPCiYd3CESAgQLz8=","eXSLrLqKSxRTixSP/k4YimriB2lufao6trqTrsxxlyg=","SndbMKVtcTenAkwi2JBfGzD+mhexp1qJbRIY+A1JRIU=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2627187086\nMb8C6uZwsvvhJ9YUAtLrc/p8b71PxKyS7VtlxPMRo4Y=\n\n— rekor.sigstore.dev wNI9ajBGAiEA9L5IZUAQ3KBLF/uw5R+dJ5Bf4xBofh5mDe+IL3S1YUICIQDr+VyJYuiEkXd1sNxsQc2mr9+/VeIB8IIaCG9Zv28yIQ==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIzNDYxMGY1ZjE2YmM5NzZmOTlkOTg3Zjk3MWVkY2FmNzZlZjUxNTRhNzRkNGIyMTlhZDI1MzEwY2E0YmNjYWJhIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUMzanhTbm5MTFpIcGUzdjVCZWl6N0Q2bzhNS3FVZjFVdzgzNmo5Y3FRNDVBSWdmWkYwY3Z5Lyt6TmtlK1k2QlA3TCszZ01iblg2QW9WUVYwNEdUbmE0ampJPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFpla05EUW5WcFowRjNTVUpCWjBsVlUydHNVRmRRSzAxR1kwWlZRbW93WWpWeEszbHNjWFUyTVdOTmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlVUVROTlJHdDVUMVJKZUZkb1kwNU5hbGwzVDFSQk0wMUVhM3BQVkVsNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZOVUc1bWFIWmpSVkZsVWxaUVVXTm5OemxhVmtwS1psZzBZek5RU1hNMU1FOWlNMGtLTWl0dE5WQkVUMFppVW1ab2RrOXpVSFJFWkRNNFlWcFllbkl5YTJWWlZEZDVWMUZ1U1d4cE1XOVJjRGhvUzJwRVJrdFBRMEpuWTNkbloxbEVUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZ1UVdsNENrTTNWVTFrUVM5VmFtWkpMelF3U0ROQ1kwcGFiemhCZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJKM1dVUldVakJTUVZGSUwwSkhWWGRaTkZwb1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4WE1XaFplVFUxQ2xsWE1YTlJTRXBzV201TmRtRkhWbWhhU0UxMllsZEdjR0pxUVRWQ1oyOXlRbWRGUlVGWlR5OU5RVVZDUWtOMGIyUklVbmRqZW05MlRETlNkbUV5Vm5VS1RHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZtbGtXRTVzWTIxT2RtSnVVbXhpYmxGMVdUSTVkRTFDT0VkRGFYTkhRVkZSUW1jM09IZEJVVWxGUlZoa2RncGpiWFJ0WWtjNU0xZ3lVbkJqTTBKb1pFZE9iMDFFV1VkRGFYTkhRVkZSUW1jM09IZEJVVTFGUzBSbk5WcEVVWGRPVkZKdFRYcGpNVTVVUVhwUFYxRXhDazVFWXpCWk1scHNXa1JCZWxwcVFUSmFSMVYzVFdwYWJGcFVTbXBhVkdOM1IzZFpTMHQzV1VKQ1FVZEVkbnBCUWtKQlVVNVJibFp3WWtkUlowdEhNV2dLV1RBNVZFdFVRWEpDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0l4YjJSWFpHNWhWelZ1V20xR2FscFRPWEphV0VwMVdsZDRla3hYVG5aaVZ6RXhZbTFzTUFwbFZFRmtRbWR2Y2tKblJVVkJXVTh2VFVGRlIwSkJPWGxhVjFwNlRESm9iRmxYVW5wTU1qRm9ZVmMwZDA5M1dVdExkMWxDUWtGSFJIWjZRVUpEUVZGMENrUkRkRzlrU0ZKM1kzcHZka3d6VW5aaE1sWjFURzFHYW1SSGJIWmliazExV2pKc01HRklWbWxrV0U1c1kyMU9kbUp1VW14aWJsRjFXVEk1ZEUxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZGclJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJVdENRMjlOUzBSbk5WcEVVWGRPVkZKdFRYcGpNVTVVUVhvS1QxZFJNVTVFWXpCWk1scHNXa1JCZWxwcVFUSmFSMVYzVFdwYWJGcFVTbXBhVkdOM1NGRlpTMHQzV1VKQ1FVZEVkbnBCUWtOM1VWQkVRVEZ1WVZoU2J3cGtWMGwwWVVjNWVtUkhWbXROUlVGSFEybHpSMEZSVVVKbk56aDNRVkYzUlUxbmQzZGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1tZ3hDbG95WkhCaWJXUnRXVmRPYkV3eWRHeGpiVFZzWWtoTmRGa3lPWFJpV0ZaMVlWaFNOVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVEJGUzJkM2IwOUViR3NLVGtSQk1VNUhXWHBPZWxVeFRVUk5OVnBFVlRCT2VsSnFXbTFXYTAxRVRtMU5SRnByV2xSQmVVNXRWbXhOYlU1c1RucEJaa0puYjNKQ1owVkZRVmxQTHdwTlFVVlBRa0pGVFVRelNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmQwNTZSVEJPZWxVeENrMXFhM2RNWjFsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWjBSQ05XOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaFNGWnVXakpzZFZveVdtZ0tXVEpWZDBkQldVdExkMWxDUWtGSFJIWjZRVUpGVVZGTFJFRm5lVTVVWTNsTlJHTXdUWHBDZUVKbmIzSkNaMFZGUVZsUEwwMUJSVk5DUjAxTldWZG9NQXBrU0VKNlQyazRkbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemgxQ2xveWJEQmhTRlpwVEROa2RtTnRkRzFpUnprelkzazVhV1JYYkhOYVF6RjBXVmROZFdWWFJuUmlSVUo1V2xkYWVrd3lhR3haVjFKNlRESXhhR0ZYTkhjS1QwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWM1VYRkVRMmMwVDFkUk1FMUVWVEJhYWswelRsUlZkMDE2Ykd0T1ZGRXpUa2RPYlZwWFVYZE5NbGwzVG0xU2JBcE5SRWt5V2xkVmVWa3lWVE5OUTBWSFEybHpSMEZSVVVKbk56aDNRVkpSUlVWM2QxSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkYVFWbExDa3QzV1VKQ1FVZEVkbnBCUWtaUlVsZEVSbEp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZVWhXYmxveWJIVmFNbHBvV1RKVmRtRXlWbmtLWW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNaWlYwNHdZVmM1ZFdONU9YbGtWelY2VEhwTk1FMVVRWHBOYWtWNVRVUmpla3d5UmpCa1IxWjBZMGhTZWdwTWVrVjNSbWRaUzB0M1dVSkNRVWRFZG5wQlFrWm5VVWxFUVZwM1pGZEtjMkZYVFhkU1oxbExTM2RaUWtKQlIwUjJla0ZDUjBGUk5FUkVXbmxhV0VKMkNrOXRhREZhTW1Sd1ltMWtiVmxYVG14TU1uUnNZMjAxYkdKSVRYUlpNamwwWWxoV2RXRllValZQYmtwc1dtcHdlVnBYV25wTU1taHNXVmRTZWt3eU1XZ0tZVmMwZDJkWmMwZERhWE5IUVZGUlFqRnVhME5DUVVsRlpsRlNOMEZJYTBGa2QwUmtVRlJDY1hoelkxSk5iVTFhU0doNVdscDZZME52YTNCbGRVNDBPQXB5Wml0SWFXNUxRVXg1Ym5WcVowRkJRV0ZDTjAweVdVVkJRVUZGUVhkQ1NVMUZXVU5KVVVOQ1dUVXpUVkZKTjJWa1VFWXdjbGxTWm1JdmFXNXhWMll5Q2pKck1Hd3dLelZoU1ZSQ1R6ZElXbXBoVVVsb1FVcE9MMVo2WWtSQmIwOVFkR3QxTldsSGMyRmlOalo1VDJOd056VXdXWGh4YTA1UGRVTnliVVp3WW1ZS1RVRnZSME5EY1VkVFRUUTVRa0ZOUkVFeWEwRk5SMWxEVFZGRWJVVlBPWGxsUlVsR1VtUjBWaXR2VURaT2FHODJVSFZTTUVWU1pXaEtiMjVUVFhkSGJBcE5TR1ZrYW5ZMWFrOXlNbWRKVGtKdGFqRkVXbkJQYms5dWJVbERUVkZFU2pKallrRlpSWEpLVDNwbVMwOVdXalE1YjNSRFJGVTNMMWwzVUZKM01FaERDbTlhYjJNeEwxRnZZM2RtWmpWbEwyUkNjazR4Y1ZCS2FYcElSa2hqVVZFOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyzADAgEAMIICwgYJKoZIhvcNAQcCoIICszCCAq8CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgm73RszwUyE00G9KtdQa8+CfYZuxji/chSwPuxU3cz6ECFQCoGsgDfdgZ6Xud5hpIBGlxKf1RTBgPMjAyNjA5MDcwOTI5MjFaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHcMIIB2AIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDkwNzA5MjkyMVowLwYJKoZIhvcNAQkEMSIEIDxM1Ihidis0CvOkN+AXQ3D4c2/9XUC4NTq5ZkMGV6ugMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRoMGYCMQCTn/MeWmEL85F68ehqDHEd9wp7jnX43pglP/7C/LBKOv8MLiXOknzSpIWAZMiXzFYCMQDpTDkL984J4siig583Kz6PC1mw2tfUfV2REMO5YUlcuWqseTxc+rbau+gfruyuf6s="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"NGEPXxa8l2+Z2Yf5ce3K9271FUp01LIZrSUxDKS8yro="},"signature":"MEUCIQC3jxSnnLLZHpe3v5Beiz7D6o8MKqUf1Uw836j9cqQ45AIgfZF0cvy/+zNke+Y6BP7L+3gMbnX6AoVQV04GTna4jjI="}}
|
build/torch214-metal-aarch64-darwin/__init__.py
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Compute directly on the packed blocks of a GGUF checkpoint.
|
| 2 |
+
|
| 3 |
+
A GGUF weight is stored as blocks of 32 or 256 values sharing a scale. These kernels read that
|
| 4 |
+
layout as it is, so a quantized model can be loaded and run without ever materializing a dense
|
| 5 |
+
copy — which is the whole memory saving.
|
| 6 |
+
|
| 7 |
+
Ported from llama.cpp's ggml-cuda; `vendor/UPSTREAM` pins the revision. The ops are named for what
|
| 8 |
+
they do rather than for a backend: each backend registers its own implementation of the same
|
| 9 |
+
schema, so calls dispatch on the tensor's device.
|
| 10 |
+
"""
|
| 11 |
+
|
| 12 |
+
import torch
|
| 13 |
+
|
| 14 |
+
from ._ops import add_op_namespace_prefix, ops
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
__all__ = ["GEMV_TYPES", "MAX_GEMV_ROWS", "dequantize", "get_rows", "mul_mat_id", "mul_mat_vec"]
|
| 18 |
+
|
| 19 |
+
# Upstream's MMVQ_MAX_BATCH_SIZE: `mul_mat_vec` has no implementation beyond this many rows, so a
|
| 20 |
+
# caller with more (prefill) dequantizes and uses an ordinary matmul.
|
| 21 |
+
MAX_GEMV_ROWS = 8
|
| 22 |
+
|
| 23 |
+
# ggml type ids `mul_mat_vec` implements, as this build reports them -- it is backend-specific, and
|
| 24 |
+
# a type routed into a gemv that has no kernel for it is a fault, not a fallback. CUDA covers
|
| 25 |
+
# Q4_0/Q4_1/Q5_0/Q5_1/Q8_0, the K quants, the IQ quants, MXFP4/NVFP4 and Q1_0/Q2_0; Metal is the
|
| 26 |
+
# same minus NVFP4/Q1_0/Q2_0, which its metallib has no kernels for. `dequantize` covers more, so
|
| 27 |
+
# check this before choosing the fused path.
|
| 28 |
+
try:
|
| 29 |
+
GEMV_TYPES = frozenset(ops.gemv_types())
|
| 30 |
+
except AttributeError:
|
| 31 |
+
# A build published before `gemv_types` existed; those are CUDA-only, so its list is theirs.
|
| 32 |
+
GEMV_TYPES = frozenset({2, 3, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 29, 39, 40, 41, 42})
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
def get_rows(
|
| 36 |
+
blocks: torch.Tensor, indices: torch.Tensor, ggml_type: int, cols: int, dtype: torch.dtype
|
| 37 |
+
) -> torch.Tensor:
|
| 38 |
+
"""The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.
|
| 39 |
+
|
| 40 |
+
ggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table
|
| 41 |
+
never touches the rest.
|
| 42 |
+
"""
|
| 43 |
+
return ops.get_rows(blocks, indices, ggml_type, cols, dtype)
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def dequantize(
|
| 47 |
+
blocks: torch.Tensor, ggml_type: int, rows: int, cols: int, dtype: torch.dtype
|
| 48 |
+
) -> torch.Tensor:
|
| 49 |
+
"""`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`."""
|
| 50 |
+
return ops.dequantize(blocks, ggml_type, rows, cols, dtype)
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def mul_mat_vec(
|
| 54 |
+
blocks: torch.Tensor, x: torch.Tensor, ggml_type: int, out_features: int
|
| 55 |
+
) -> torch.Tensor:
|
| 56 |
+
"""Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.
|
| 57 |
+
|
| 58 |
+
`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32
|
| 59 |
+
whatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,
|
| 60 |
+
where the cast can be fused into whatever consumes it.
|
| 61 |
+
"""
|
| 62 |
+
return ops.mul_mat_vec(blocks, x, ggml_type, out_features)
|
| 63 |
+
|
| 64 |
+
|
| 65 |
+
def mul_mat_id(
|
| 66 |
+
blocks: torch.Tensor, x: torch.Tensor, ids: torch.Tensor, ggml_type: int, out_features: int
|
| 67 |
+
) -> torch.Tensor:
|
| 68 |
+
"""One dispatch for a bank of routed experts: ggml's `mul_mv_id`.
|
| 69 |
+
|
| 70 |
+
`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and
|
| 71 |
+
`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is
|
| 72 |
+
`(n_tokens, n_used, out_features)` f32, one row per slot.
|
| 73 |
+
|
| 74 |
+
The alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch
|
| 75 |
+
around it -- which is most of what a MoE decode step costs.
|
| 76 |
+
"""
|
| 77 |
+
return ops.mul_mat_id(blocks, x, ids, ggml_type, out_features)
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
# Without these, torch.compile cannot trace the ops and breaks the graph at every call.
|
| 81 |
+
@torch.library.register_fake(add_op_namespace_prefix("get_rows"))
|
| 82 |
+
def _get_rows_fake(blocks, indices, ggml_type, cols, dtype):
|
| 83 |
+
return blocks.new_empty((indices.numel(), cols), dtype=dtype)
|
| 84 |
+
|
| 85 |
+
|
| 86 |
+
@torch.library.register_fake(add_op_namespace_prefix("dequantize"))
|
| 87 |
+
def _dequantize_fake(blocks, ggml_type, rows, cols, dtype):
|
| 88 |
+
return blocks.new_empty((rows, cols), dtype=dtype)
|
| 89 |
+
|
| 90 |
+
|
| 91 |
+
@torch.library.register_fake(add_op_namespace_prefix("mul_mat_vec"))
|
| 92 |
+
def _mul_mat_vec_fake(blocks, x, ggml_type, out_features):
|
| 93 |
+
return x.new_empty((x.shape[0], out_features), dtype=torch.float32)
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
@torch.library.register_fake(add_op_namespace_prefix("mul_mat_id"))
|
| 97 |
+
def _mul_mat_id_fake(blocks, x, ids, ggml_type, out_features):
|
| 98 |
+
return x.new_empty((x.shape[0], ids.shape[1], out_features), dtype=torch.float32)
|
build/torch214-metal-aarch64-darwin/_ggml_quantization_metal_89d4054.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f7c0c0f93067a933c80c19beffb7f86fb6db223556140c3c5c5300a48991836f
|
| 3 |
+
size 3347704
|
build/torch214-metal-aarch64-darwin/_ops.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch
|
| 2 |
+
from . import _ggml_quantization_metal_89d4054
|
| 3 |
+
ops = torch.ops._ggml_quantization_metal_89d4054
|
| 4 |
+
|
| 5 |
+
def add_op_namespace_prefix(op_name: str):
|
| 6 |
+
"""
|
| 7 |
+
Prefix op by namespace.
|
| 8 |
+
"""
|
| 9 |
+
return f"_ggml_quantization_metal_89d4054::{op_name}"
|
build/torch214-metal-aarch64-darwin/metadata.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "ggml-quantization",
|
| 3 |
+
"id": "_ggml_quantization_metal_89d4054",
|
| 4 |
+
"version": 1,
|
| 5 |
+
"kernels-minver": "0.14.0",
|
| 6 |
+
"license": "MIT",
|
| 7 |
+
"python-depends": [],
|
| 8 |
+
"kernel-depends": [],
|
| 9 |
+
"backend": {
|
| 10 |
+
"type": "metal"
|
| 11 |
+
},
|
| 12 |
+
"digest": {
|
| 13 |
+
"algorithm": "sha256",
|
| 14 |
+
"files": {
|
| 15 |
+
"__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
|
| 16 |
+
"_ggml_quantization_metal_89d4054.abi3.so": "98DA+TBnqTPIDBm+/7f4b7bbIjVWFAw8XFMApImRg28=",
|
| 17 |
+
"_ops.py": "ew+H7hL0NOlOBWz6GG+QWjw5aXEmVHb4x0E2vnbgJiw="
|
| 18 |
+
}
|
| 19 |
+
},
|
| 20 |
+
"provenance": {
|
| 21 |
+
"kernel-builder": {
|
| 22 |
+
"version": "0.17.0-dev0",
|
| 23 |
+
"commit": "a7f0afdb29a6a3372b1d47180cc0c182454c5e3b",
|
| 24 |
+
"dirty": false
|
| 25 |
+
},
|
| 26 |
+
"kernel": {
|
| 27 |
+
"commit": "89d4054f3755039d5474cfed03f06de026ee2ce7",
|
| 28 |
+
"dirty": false
|
| 29 |
+
}
|
| 30 |
+
}
|
| 31 |
+
}
|
build/torch214-metal-aarch64-darwin/metadata.json.sigstore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHYTCCBuegAwIBAgIUZdjckmsgEVLZlhTp1gX6iDrcMb8wCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwOTA3MDkyOTE5WhcNMjYwOTA3MDkzOTE5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQwSnT5C4CkIHgc1fcUTF3A+zCwh5rDSVqGS4r25ST8txMBFhfOuvIpAPIFsam9bBvhB1qNuICpOCEOwZCMIIE6OCBgYwggYCMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUlu1IZxrdRm7o663qXOMy0iHSm2cwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wbwYDVR0RAQH/BGUwY4ZhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDg5ZDQwNTRmMzc1NTAzOWQ1NDc0Y2ZlZDAzZjA2ZGUwMjZlZTJjZTcwGwYKKwYBBAGDvzABBAQNQnVpbGQgKG1hY09TKTArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHEGCisGAQQBg78wAQkEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAEKBCoMKDg5ZDQwNTRmMzc1NTAzOWQ1NDc0Y2ZlZDAzZjA2ZGUwMjZlZTJjZTcwHQYKKwYBBAGDvzABCwQPDA1naXRodWItaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoODlkNDA1NGYzNzU1MDM5ZDU0NzRjZmVkMDNmMDZkZTAyNmVlMmNlNzAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBxBgorBgEEAYO/MAESBGMMYWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC1tYWMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4OWQ0MDU0ZjM3NTUwMzlkNTQ3NGNmZWQwM2YwNmRlMDI2ZWUyY2U3MCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzM0MTAzMjEyMDczL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAaB7M1/SAAAEAwBHMEUCIQCVehtpIeXOjO6QBriS+W5AeHFo6Dq5fuii9ID0fsz5AwIgbmVXHYl6YIgKqxI7AGHgAhDiWyymC27ondzuvHTj7uQwCgYIKoZIzj0EAwMDaAAwZQIwZNCZQ0IqhJsdDxixsnqFZJsh6k1X3VbASZ1ULc8sESL2yxU71Fhn5y1Rm1HFXk40AjEA5OTWuEVPEKqvo4aWBMrCUbGR1XK3TL7nfZPhT5b3qhFI9uY1Sr1G39BbAQfUmNzK"},"tlogEntries":[{"logIndex":"2749091098","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1788773360","inclusionPromise":{"signedEntryTimestamp":"MEQCIEEaiysuD5Y25XRXxNmcqqzOa7Krg6o8t408/jgnSOWfAiAt4Ht5o/Q6YyIEVWnN825KKWeCdKdB48hrKo91zxGHng=="},"inclusionProof":{"logIndex":"2627186836","rootHash":"CiIJ53SGaJwo//F0zRSAGV3y+UC7ttwe8fujnU/42RU=","treeSize":"2627186864","hashes":["XJiHZ38lOWUtUOH9vTvl1wwO+FkEPW0uE6AU6+UiHwQ=","B3TyMfWvFQLa9dKTY3vFiXDFig+sqGK8mVHJWwnKNq0=","ec0g3cXm3H0S5Lc5+5JtkJD/Y31FFA8lFUanWEYE5hk=","g9NdIMx1t6OgKOQ0OI30JtHV0AZiWhtKFZJ1VUazORI=","7M9ylSFT+GDo0pmGC0f3d7DqbGyMjs0+p3VGEXxfawk=","3hOIgEYXw08VB5eeh0jMXGS6nNp3k7auFnORl2KYgYg=","S7JzeEWlveYApqvss82E+ruQepFbmouDyhV64AlHVRU=","07mlDNXqAVPo5En9eeaRR+4iOZLmrRpJoNfpWM2F5Vo=","X+ms4agRFYCrdym7/FHw+/rErgJ/EFH6xKC650WNzCU=","rC7UvsBWtIMUY1hF7VAc1IuD9m+gPgcwdArHV3COAxg=","ch0aD372ymT2fXHxbf+epFKHoFZu8e2qER+xxSCbPyc=","yLcHDDCEu1BAK+IfkRJ79X8cbQ0Ewt8a51AAHz4ItBA=","sFs5ZPVs0GrIELeO+PLKnaw6Xqx6rrLLSsxTCL7uEy4=","PeXZrqD3jq5qFdOmhUHJ8en1qzGlcp6bfMESzIwc3z0=","lKSWYj364IeG0b10DY/iYLgSeWiNkybEZLzd49gUFSo=","7tD2K8mAqGTMENrP2YXWz71BeTWQPCiYd3CESAgQLz8=","eXSLrLqKSxRTixSP/k4YimriB2lufao6trqTrsxxlyg=","SndbMKVtcTenAkwi2JBfGzD+mhexp1qJbRIY+A1JRIU=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2627186864\nCiIJ53SGaJwo//F0zRSAGV3y+UC7ttwe8fujnU/42RU=\n\n— rekor.sigstore.dev wNI9ajBEAiAeRiTrpCM3jPDOGwXi/X/qBDqNQdvAXX1eGFh5YGzr7wIgdSha26ymXcSkChhKHlPVLaxLLooecRQEDFG6s03/NLw=\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI3NmVkMmUzYjFkMGZkMTZmN2E3MGI5ZGFhMjJlYmZkYTExZWYwYjA4MTMyNzFiZGI3YWJlYWJjOTI4YWQwYzk2In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJSDdjZ2p5cEwyQkhYVS81Qi8yM0N5ek9WVWNyNUlLUW5Ta29iZXRzcDVSUkFpQUZFRVdveEtoU0VjMnI5alIxeHNTamR2YmJQZlpYOHJQNFhxRi9JaGc4enc9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFpWRU5EUW5WbFowRjNTVUpCWjBsVldtUnFZMnR0YzJkRlZreGFiR2hVY0RGbldEWnBSSEpqVFdJNGQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlVUVROTlJHdDVUMVJGTlZkb1kwNU5hbGwzVDFSQk0wMUVhM3BQVkVVMVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZSZDFOdVZEVkRORU5yU1Vobll6Rm1ZMVZVUmpOQkszcERkMmcxY2tSVFZuRkhVelFLY2pJMVUxUTRkSGhOUWtab1prOTFka2x3UVZCSlJuTmhiVGxpUW5ab1FqRnhUblZKUTNCUFEwVlBkMXBEVFVsSlJUWlBRMEpuV1hkbloxbERUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZzZFRGSkNscDRjbVJTYlRkdk5qWXpjVmhQVFhrd2FVaFRiVEpqZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJKM1dVUldVakJTUVZGSUwwSkhWWGRaTkZwb1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4WE1XaFplVFUxQ2xsWE1YTlJTRXBzV201TmRtRkhWbWhhU0UxMllsZEdjR0pxUVRWQ1oyOXlRbWRGUlVGWlR5OU5RVVZDUWtOMGIyUklVbmRqZW05MlRETlNkbUV5Vm5VS1RHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZtbGtXRTVzWTIxT2RtSnVVbXhpYmxGMVdUSTVkRTFDT0VkRGFYTkhRVkZSUW1jM09IZEJVVWxGUlZoa2RncGpiWFJ0WWtjNU0xZ3lVbkJqTTBKb1pFZE9iMDFFV1VkRGFYTkhRVkZSUW1jM09IZEJVVTFGUzBSbk5WcEVVWGRPVkZKdFRYcGpNVTVVUVhwUFYxRXhDazVFWXpCWk1scHNXa1JCZWxwcVFUSmFSMVYzVFdwYWJGcFVTbXBhVkdOM1IzZFpTMHQzV1VKQ1FVZEVkbnBCUWtKQlVVNVJibFp3WWtkUlowdEhNV2dLV1RBNVZFdFVRWEpDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0l4YjJSWFpHNWhWelZ1V20xR2FscFRPWEphV0VwMVdsZDRla3hYVG5aaVZ6RXhZbTFzTUFwbFZFRmtRbWR2Y2tKblJVVkJXVTh2VFVGRlIwSkJPWGxhVjFwNlRESm9iRmxYVW5wTU1qRm9ZVmMwZDA5M1dVdExkMWxDUWtGSFJIWjZRVUpEUVZGMENrUkRkRzlrU0ZKM1kzcHZka3d6VW5aaE1sWjFURzFHYW1SSGJIWmliazExV2pKc01HRklWbWxrV0U1c1kyMU9kbUp1VW14aWJsRjFXVEk1ZEUxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZGclJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJVdENRMjlOUzBSbk5WcEVVWGRPVkZKdFRYcGpNVTVVUVhvS1QxZFJNVTVFWXpCWk1scHNXa1JCZWxwcVFUSmFSMVYzVFdwYWJGcFVTbXBhVkdOM1NGRlpTMHQzV1VKQ1FVZEVkbnBCUWtOM1VWQkVRVEZ1WVZoU2J3cGtWMGwwWVVjNWVtUkhWbXROUlVGSFEybHpSMEZSVVVKbk56aDNRVkYzUlUxbmQzZGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1tZ3hDbG95WkhCaWJXUnRXVmRPYkV3eWRHeGpiVFZzWWtoTmRGa3lPWFJpV0ZaMVlWaFNOVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVEJGUzJkM2IwOUViR3NLVGtSQk1VNUhXWHBPZWxVeFRVUk5OVnBFVlRCT2VsSnFXbTFXYTAxRVRtMU5SRnByV2xSQmVVNXRWbXhOYlU1c1RucEJaa0puYjNKQ1owVkZRVmxQTHdwTlFVVlBRa0pGVFVRelNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmQwNTZSVEJPZWxVeENrMXFhM2RNWjFsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWjBSQ05XOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaFNGWnVXakpzZFZveVdtZ0tXVEpWZDBkQldVdExkMWxDUWtGSFJIWjZRVUpGVVZGTFJFRm5lVTVVWTNsTlJHTXdUWHBDZUVKbmIzSkNaMFZGUVZsUEwwMUJSVk5DUjAxTldWZG9NQXBrU0VKNlQyazRkbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemgxQ2xveWJEQmhTRlpwVEROa2RtTnRkRzFpUnprelkzazVhV1JYYkhOYVF6RjBXVmROZFdWWFJuUmlSVUo1V2xkYWVrd3lhR3haVjFKNlRESXhhR0ZYTkhjS1QwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWM1VYRkVRMmMwVDFkUk1FMUVWVEJhYWswelRsUlZkMDE2Ykd0T1ZGRXpUa2RPYlZwWFVYZE5NbGwzVG0xU2JBcE5SRWt5V2xkVmVWa3lWVE5OUTBWSFEybHpSMEZSVVVKbk56aDNRVkpSUlVWM2QxSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkYVFWbExDa3QzV1VKQ1FVZEVkbnBCUWtaUlVsZEVSbEp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZVWhXYmxveWJIVmFNbHBvV1RKVmRtRXlWbmtLWW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNaWlYwNHdZVmM1ZFdONU9YbGtWelY2VEhwTk1FMVVRWHBOYWtWNVRVUmpla3d5UmpCa1IxWjBZMGhTZWdwTWVrVjNSbWRaUzB0M1dVSkNRVWRFZG5wQlFrWm5VVWxFUVZwM1pGZEtjMkZYVFhkU1oxbExTM2RaUWtKQlIwUjJla0ZDUjBGUk5FUkVXbmxhV0VKMkNrOXRhREZhTW1Sd1ltMWtiVmxYVG14TU1uUnNZMjAxYkdKSVRYUlpNamwwWWxoV2RXRllValZQYmtwc1dtcHdlVnBYV25wTU1taHNXVmRTZWt3eU1XZ0tZVmMwZDJkWmIwZERhWE5IUVZGUlFqRnVhME5DUVVsRlprRlNOa0ZJWjBGa1owUmtVRlJDY1hoelkxSk5iVTFhU0doNVdscDZZME52YTNCbGRVNDBPQXB5Wml0SWFXNUxRVXg1Ym5WcVowRkJRV0ZDTjAweEwxTkJRVUZGUVhkQ1NFMUZWVU5KVVVOV1pXaDBjRWxsV0U5cVR6WlJRbkpwVXl0WE5VRmxTRVp2Q2paRWNUVm1kV2xwT1VsRU1HWnplalZCZDBsblltMVdXRWhaYkRaWlNXZExjWGhKTjBGSFNHZEJhRVJwVjNsNWJVTXlOMjl1WkhwMWRraFVhamQxVVhjS1EyZFpTVXR2V2tsNmFqQkZRWGROUkdGQlFYZGFVVWwzV2s1RFdsRXdTWEZvU25Oa1JIaHBlSE51Y1VaYVNuTm9ObXN4V0ROV1lrRlRXakZWVEdNNGN3cEZVMHd5ZVhoVk56RkdhRzQxZVRGU2JURklSbGhyTkRCQmFrVkJOVTlVVjNWRlZsQkZTM0YyYnpSaFYwSk5ja05WWWtkU01WaExNMVJNTjI1bVdsQm9DbFExWWpOeGFFWkpPWFZaTVZOeU1VY3pPVUppUVZGbVZXMU9la3NLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgLhdYsnj9x6/GDXzkk0dl6DKjUKwR0fx9T/6XFXANmWcCFBb7HDo6gyCq0FUry6n2Ow4/UNMeGA8yMDI2MDkwNzA5MjkxOVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdwwggHYAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwOTA3MDkyOTE5WjAvBgkqhkiG9w0BCQQxIgQgU5G6z6uVSLlo1inkQFyyReVt0YoCKF+LqBn6zt1TIuYwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGgwZgIxAJbxyrfPGIbOtb3vpqQw8V8fZA8aPN0Q+uAb/83eVAcvycvolO3Y9dsreQ920PhX3wIxALWNVV5cACxJaqA+1r/cDdewc6hCr3mKxKL0k+kFdmS2Q5uwMz7vqtwF1ftl1xwTKw=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"du0uOx0P0W96cLnaoi6/2hHvCwgTJxvber6rySitDJY="},"signature":"MEQCIH7cgjypL2BHXU/5B/23CyzOVUcr5IKQnSkobetsp5RRAiAFEEWoxKhSEc2r9jR1xsSjdvbbPfZX8rP4XqF/Ihg8zw=="}}
|