Kernels:
Trusted publisher
Uploaded using `kernel-builder`.
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- build/torch211-cxx11-cu126-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so} +2 -2
- build/torch211-cxx11-cu126-x86_64-linux/_ops.py +3 -3
- build/torch211-cxx11-cu126-x86_64-linux/metadata.json +3 -3
- build/torch211-cxx11-cu126-x86_64-linux/metadata.json.sigstore +1 -1
- build/torch211-cxx11-cu128-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so} +2 -2
- build/torch211-cxx11-cu128-x86_64-linux/_ops.py +3 -3
- build/torch211-cxx11-cu128-x86_64-linux/metadata.json +3 -3
- build/torch211-cxx11-cu128-x86_64-linux/metadata.json.sigstore +1 -1
- build/torch211-cxx11-cu130-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so} +2 -2
- build/torch211-cxx11-cu130-x86_64-linux/_ops.py +3 -3
- build/torch211-cxx11-cu130-x86_64-linux/metadata.json +5 -4
- build/torch211-cxx11-cu130-x86_64-linux/metadata.json.sigstore +1 -1
- build/torch212-cxx11-cu126-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so} +2 -2
- build/torch212-cxx11-cu126-x86_64-linux/_ops.py +3 -3
- build/torch212-cxx11-cu126-x86_64-linux/metadata.json +3 -3
- build/torch212-cxx11-cu126-x86_64-linux/metadata.json.sigstore +1 -1
- build/torch212-cxx11-cu130-x86_64-linux/_mamba_ssm_cuda_2e4b976.abi3.so +3 -0
- build/torch212-cxx11-cu130-x86_64-linux/_mamba_ssm_cuda_785446d.abi3.so +0 -3
- build/torch212-cxx11-cu130-x86_64-linux/_ops.py +3 -3
- build/torch212-cxx11-cu130-x86_64-linux/metadata.json +5 -4
- build/torch212-cxx11-cu130-x86_64-linux/metadata.json.sigstore +1 -1
- build/torch212-cxx11-cu132-x86_64-linux/_mamba_ssm_cuda_2e4b976.abi3.so +3 -0
- build/torch212-cxx11-cu132-x86_64-linux/_mamba_ssm_cuda_785446d.abi3.so +0 -3
- build/torch212-cxx11-cu132-x86_64-linux/_ops.py +3 -3
- build/torch212-cxx11-cu132-x86_64-linux/metadata.json +5 -4
- build/torch212-cxx11-cu132-x86_64-linux/metadata.json.sigstore +1 -1
- build/torch213-cxx11-cu126-x86_64-linux/__init__.py +12 -0
- build/torch213-cxx11-cu126-x86_64-linux/_mamba_ssm_cuda_2e4b976.abi3.so +3 -0
- build/torch213-cxx11-cu126-x86_64-linux/_ops.py +9 -0
- build/torch213-cxx11-cu126-x86_64-linux/distributed/__init__.py +0 -0
- build/torch213-cxx11-cu126-x86_64-linux/distributed/distributed_utils.py +144 -0
- build/torch213-cxx11-cu126-x86_64-linux/distributed/tensor_parallel.py +296 -0
- build/torch213-cxx11-cu126-x86_64-linux/mamba_ssm/__init__.py +26 -0
- build/torch213-cxx11-cu126-x86_64-linux/metadata.json +62 -0
- build/torch213-cxx11-cu126-x86_64-linux/metadata.json.sigstore +1 -0
- build/torch213-cxx11-cu126-x86_64-linux/models/__init__.py +5 -0
- build/torch213-cxx11-cu126-x86_64-linux/models/config_mamba.py +18 -0
- build/torch213-cxx11-cu126-x86_64-linux/models/mixer_seq_simple.py +309 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/__init__.py +7 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/block.py +107 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/mamba2.py +502 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/mamba2_simple.py +229 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/mamba_simple.py +339 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/mha.py +294 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/mlp.py +34 -0
- build/torch213-cxx11-cu126-x86_64-linux/modules/ssd_minimal.py +111 -0
- build/torch213-cxx11-cu126-x86_64-linux/ops/__init__.py +1 -0
- build/torch213-cxx11-cu126-x86_64-linux/ops/selective_scan_interface.py +446 -0
- build/torch213-cxx11-cu126-x86_64-linux/ops/triton/__init__.py +2 -0
- build/torch213-cxx11-cu126-x86_64-linux/ops/triton/k_activations.py +169 -0
build/torch211-cxx11-cu126-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ee79bc4d4fb452e0a814943420ce0b8b8005761c7785e239444ffa33175c22e9
|
| 3 |
+
size 442368288
|
build/torch211-cxx11-cu126-x86_64-linux/_ops.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import torch
|
| 2 |
-
from . import
|
| 3 |
-
ops = torch.ops.
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
-
return f"
|
|
|
|
| 1 |
import torch
|
| 2 |
+
from . import _mamba_ssm_cuda_2e4b976
|
| 3 |
+
ops = torch.ops._mamba_ssm_cuda_2e4b976
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
+
return f"_mamba_ssm_cuda_2e4b976::{op_name}"
|
build/torch211-cxx11-cu126-x86_64-linux/metadata.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
-
"id": "
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
@@ -23,8 +23,8 @@
|
|
| 23 |
"algorithm": "sha256",
|
| 24 |
"files": {
|
| 25 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 26 |
-
"
|
| 27 |
-
"_ops.py": "
|
| 28 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 29 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 30 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
|
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
+
"id": "_mamba_ssm_cuda_2e4b976",
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
|
|
| 23 |
"algorithm": "sha256",
|
| 24 |
"files": {
|
| 25 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 26 |
+
"_mamba_ssm_cuda_2e4b976.abi3.so": "7nm8TU+0UuCoFJQ0IM4Li4AFdhx3heI5RE/6MxdcIuk=",
|
| 27 |
+
"_ops.py": "+JzYZB0OFy2LuJrKfDpyk0JXsS8Iz9Eoy+pClu3+vVI=",
|
| 28 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 29 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 30 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
build/torch211-cxx11-cu126-x86_64-linux/metadata.json.sigstore
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHdTCCBvqgAwIBAgIUYyX81VyT25p1bgyXqm9lQeH8kHYwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDY1OTI0WhcNMjYwNjE4MDcwOTI0WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEx+16r+d+2JzA1iQEGT915tf9JmVSeLp+GhDumrQ9a9jJkIPIDQfJekkFjKMysqbLE6KQunpvtpw6tHUO+mLRsqOCBhkwggYVMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUA5iUbrxpOfIuu5KLwd2XEHR1qqwwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYsGCisGAQQB1nkCBAIEfQR7AHkAdwDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZhwRYAAAEAwBIMEYCIQC8IT8xaei/F2Z8nI5/IXytBDubaqS1rfv6D0ozYZDntAIhALiCrGmLCcr2F2dhloBi+AnZmL6hEw7Hz0yEDHM5wZuVMAoGCCqGSM49BAMDA2kAMGYCMQDGautS02w6hi+lxyx1gtBoLLs0jgnpo+lpiN2c47sgUTw7sFo/QbOEatODZYYqXqYCMQCjY7/7i9zZ3w6Yj23sD2nl60DwL2mpoyfH2tpCYh+Ui2zoAXdYnG/qLt7yfvui9ig="},"tlogEntries":[{"logIndex":"1857846004","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781765965","inclusionPromise":{"signedEntryTimestamp":"MEUCIQDchIWUU+h8clVM4elLKnvgD5/mE8jfUk+N9NBaKn6rrwIgL0yI1/T3fWTI1DzhR1lUvmAAadUE6QsLutqSLn4XHQ8="},"inclusionProof":{"logIndex":"1735941742","rootHash":"B5qQttEkoXnytv5SG1N+wZhqLOn7QUEqEFfFq1cVABg=","treeSize":"1735941753","hashes":["/O/Zo3qBr8fViut1MmsTGuTGGB/fRN55YPrSqwqmEpo=","M7ObQQJ8kZJbtxbcN7elI0cnSyPyIk3GtRuTYLlVKwk=","ZNeETz6OHNtnGaiUVN36EqKxqZqoWwQn1AU5ti1lVHM=","8F/FaBHU1/+PeH5/jCPyVTFwCgEnmKY2NCKZZI082z8=","HVbO4YlXjghF6N5/yHG/Ip8Ez/5hQsHRyV1GTrDQXp0=","D0XpEpAXFDSGj/Vt7WQwB6iX48YgrzcJyjPCPu4S3Ck=","ABG+vg2shNQtTbo3ipwR9Z24CxAgSdArL5i7+D02Hf0=","Zj/ZY0eBi0gwVgBaoEOc3DrvBQix71RFSiNXK4sPli4=","Q7TdDu7WbPJBWdHFC09Xg6476ZNxZHnnk9EwtegIzjs=","TIqZLgA6aRph3LTsRCezw52mN9jLpsdRobJF4nyuDsk=","h8qmLE5ZM/33fkJcCpa82SXVNA+SsbijaPv7rG6xbIM=","dBGkiPcr9PeHrVdmtM5A5GHZYWYJVpP1XmzLNrrX7Pk=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735941753\nB5qQttEkoXnytv5SG1N+wZhqLOn7QUEqEFfFq1cVABg=\n\n— rekor.sigstore.dev wNI9ajBFAiAeIOi0WRz7do+MWiVnqWali4/MXfhyrVoqyFpQuTrzFwIhAP/Jxoffc0vBAdyqbaz1ogY8HIh+Q/WSeUX1JGJWmwlN\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIyMDVkNTFlYjRkMGMwZTE2YjgxMGEyNTZkNzhiOGU3NjIwYmQ1ZjQwNjk3ODgyOGUxNTIzZDA3YWQyZDAyM2RhIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUURnMGhmYm5lbjRGeUdIT2licklMcWFWT2pTSzh6cmRubHp0MjZyTjF1RGhRSWhBTHR3bWpkb080Yjc1aWt2TEVRaU9DOVhKYWN2MlZmOTdUMU5uMVdtcXozUCIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGtWRU5EUW5aeFowRjNTVUpCWjBsVldYbFlPREZXZVZReU5YQXhZbWQ1V0hGdE9XeFJaVWc0YTBoWmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJGa3hUMVJKTUZkb1kwNU5hbGwzVG1wRk5FMUVZM2RQVkVrd1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVY0S3pFMmNpdGtLekpLZWtFeGFWRkZSMVE1TVRWMFpqbEtiVlpUWlV4d0swZG9SSFVLYlhKUk9XRTVha3ByU1ZCSlJGRm1TbVZyYTBacVMwMTVjM0ZpVEVVMlMxRjFibkIyZEhCM05uUklWVThyYlV4U2MzRlBRMEpvYTNkbloxbFdUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZCTldsVkNtSnllSEJQWmtsMWRUVkxUSGRrTWxoRlNGSXhjWEYzZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYzBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmxGU04wRklhMEZrZDBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWgzVWxsQlFVRkZRWGRDU1UxRldVTkpVVU00Q2tsVU9IaGhaV2t2UmpKYU9HNUpOUzlKV0hsMFFrUjFZbUZ4VXpGeVpuWTJSREJ2ZWxsYVJHNTBRVWxvUVV4cFEzSkhiVXhEWTNJeVJqSmthR3h2UW1rS0swRnVXbTFNTm1oRmR6ZEllakI1UlVSSVRUVjNXblZXVFVGdlIwTkRjVWRUVFRRNVFrRk5SRUV5YTBGTlIxbERUVkZFUjJGMWRGTXdNbmMyYUdrcmJBcDRlWGd4WjNSQ2IweE1jekJxWjI1d2J5dHNjR2xPTW1NME4zTm5WVlIzTjNOR2J5OVJZazlGWVhSUFJGcFpXWEZZY1ZsRFRWRkRhbGszTHpkcE9YcGFDak4zTmxscU1qTnpSREp1YkRZd1JIZE1NbTF3YjNsbVNESjBjRU5aYUN0VmFUSjZiMEZZWkZsdVJ5OXhUSFEzZVdaMmRXazVhV2M5Q2kwdExTMHRSVTVFSUVORlVsUkpSa2xEUVZSRkxTMHRMUzBLIn19fX0="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgORb3MY0KNJbaLNO1CLAGu28E0tSP8U2CYN6lMbCFkKMCFCn/lioYVq2pmzI6Vfu5zfZIABKuGA8yMDI2MDYxODA2NTkyNVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdwwggHYAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNjE4MDY1OTI1WjAvBgkqhkiG9w0BCQQxIgQgT1NdCQmOKhCXe+wBSmL1s5tU6vgEz5HxuWaGwnW8qPEwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGgwZgIxAPNrjBaLJRoBLlOqrdh6oU4PHYVf8412+ZAbOB9S7fIqVfmrjlOqu6XtPdzcUH3jdAIxALL5/sNdwpbL3vjuwt2rzOBeE5MMipk8hZxYFJxNVMQ4hAoXCnX0QBFGNm1SSroq1A=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"IF1R600MDha4EKJW14uOdiC9X0BpeIKOFSPQetLQI9o="},"signature":"MEYCIQDg0hfbnen4FyGHOibrILqaVOjSK8zrdnlzt26rN1uDhQIhALtwmjdoO4b75ikvLEQiOC9XJacv2Vf97T1Nn1Wmqz3P"}}
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHSjCCBtCgAwIBAgIUPNwo2ZGnG1e2Lg67+KLIlRB11gcwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzAzMTMzNDE4WhcNMjYwNzAzMTM0NDE4WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER9YpYQCLKzIkR2sM00hkOwBOx/1OEEP1uytmBqj4fcRDAY/E1u+nj+G9Ojqc1wrSOnst8zo7V+orv/g3VL/9z6OCBe8wggXrMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU1eZQ1hBndoGpQdpE6K538EdJSVowHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJlNGI5NzYyMWU5Mzc5NzQxMzJmNTQzZGIyNTExMjY4MDZmOTRiYmUwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjg2NTg3NTg5NjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnygv8nIAAAQDAEYwRAIgEBfC5izPOp1TziobcgW2zp/tGBcYsCwqvE+8ccLF3iYCIGl/cWSV7JKs1D477gmQYTHbEWrhcv6RslF4nLKB2DbvMAoGCCqGSM49BAMDA2gAMGUCMQCPWsalIATVKAyPLxWwHdzPaKHrKznotkO0wI/1YBCyGLzeBolbAfNOT2JIHyuJtCMCMAlxVuKmxBlBL04FPKVFyXnfdENI1Z33ebTmpoSeI14v7UR7sTMKhYkfu3lW8igFGg=="},"tlogEntries":[{"logIndex":"2061240866","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783085659","inclusionPromise":{"signedEntryTimestamp":"MEQCIH+oiQS8jkXrgqdfbNTln05kPTRE6l5YCSXA5RZLa8FaAiAaVln/MeGee2ZnhkVi1axT3ZWr7VVsQgD3cl4R15ykfg=="},"inclusionProof":{"logIndex":"1939336604","rootHash":"52dyB9vNuXeM+G0GKzUkflpYfJq8VbJ7zpPNYqs2m+Y=","treeSize":"1939336619","hashes":["oEf909Cyt0+tZY9hVZcTfGPMvlbwq+mfxoVlUq3zdO8=","po7oZ62w67AEhYa9vmzxFzjrb/vkTYtH1QMIoTYEZm8=","0izAxgfSfWnBtYqFHFVrIgUMvs6XwW8yACHXUlzGQ8A=","2Wt8g2fwVhXgg7ssMMM8nml2FnEmi9mWdOEY2vAxGd0=","l9yvu4lzQ1e3WY7YKh1v6lOUrVKIerRbWp7nN61wrxQ=","8HIoi3sv9jqOJs3dGBKd9++00FtF8K2vYPXnBcLascI=","h980rCWgvIYBK607un+yEXr+dhGz3dLkSQPLL9ehjfk=","ZXt2arn7Eq2+M/NWf8R2Cv1Ylv3UNyk5CZUmY/xiCTc=","uX+G2XyrpFpfzpHxIMRb9vLFaSUsZr1fZfBXrYAh4E8=","dkxSFJ76QYfcYZd0FZ1ztNIYtDj8WF+edLXK0EwhgP0=","ue6cwlKg+AeO5/32qCILy2n85VkpmL7JNSD/vSD1PBQ=","5BcprHTbYFhJs9/zmopgvIomJpaJBQ2p5EneNzCzjhA=","BJg3Sjw0cmSlRwTc6wLrDTLBGKIa47J4xQdeTHs89p0=","nyXRyDPEOSJJ9t2F32eShKYeAGz2Z0OK/J6fnsiywOY=","lvtUm97dglxCtkz/pZESafc25No18+C5udmljqWIKjw=","Z1MWr1e8FrDf8zVzz0XKh0zpL1DZePbT3JTZ0UIXhhg=","I+dZvIwhBcmylTZ5mLoVIKIapQHRH789ramiw5T/osA=","RIZjwQJv61lwM5JOP8iNT/RxKPr522/etVqxVBWn7KA=","b69YlhA5qlDwN70us4bq9ysnikE1ulA7EwKBTb+atY0=","LM7F5iwbk8jG29X4FwpkCN6BqDCfuNQTlz5CyQWt87s=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1939336619\n52dyB9vNuXeM+G0GKzUkflpYfJq8VbJ7zpPNYqs2m+Y=\n\n— rekor.sigstore.dev wNI9ajBFAiA0Rf7buiBccqHaEb8r4ukNuq0/L8hRvEqDakBHiw2JSAIhALBffvU+YteIuQS/cGNdSvtvPcNJuQGLvRSh1TdbcDA3\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI3NDczMGNmNTg3M2NiMDI4ZDAzNDgyMjk1YzdiNzIzYjFjZGUzYTY4NDg3M2RlMzFmNjk2NzhmODc1ZGE0NGEzIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUNMWjQ5cTkvbFN6OVNldDMzNEVuUDRjQ1VWV3lNZDFwRG16aTFkT1c0NHlRSWdjazAvSEFKSlVJdEdUUlNuWE41T0d5dGtvcG9Cekh4blhGMDhyOUNWSk1ZPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFRha05EUW5SRFowRjNTVUpCWjBsVlVFNTNiekphUjI1SE1XVXlUR2MyTnl0TFRFbHNVa0l4TVdkamQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVhwTlZFMTZUa1JGTkZkb1kwNU5hbGwzVG5wQmVrMVVUVEJPUkVVMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZTT1Zsd1dWRkRURXQ2U1d0U01uTk5NREJvYTA5M1FrOTRMekZQUlVWUU1YVjVkRzBLUW5GcU5HWmpVa1JCV1M5Rk1YVXJibW9yUnpsUGFuRmpNWGR5VTA5dWMzUTRlbTgzVml0dmNuWXZaek5XVEM4NWVqWlBRMEpsT0hkbloxaHlUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlV4WlZwUkNqRm9RbTVrYjBkd1VXUndSVFpMTlRNNFJXUktVMVp2ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVlV3V1dwck0wNXFTWGhhVkd0NlRucHJNMDVFUlhwTmJWa3hDazVFVG10WmFra3hUVlJGZVU1cVozZE9iVmsxVGtkS2FWcFVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEZPUkU1cldXcEpNVTFVUlhrS1RtcG5kMDV0V1RWT1IwcHBXbFJCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEVLVGtST2ExbHFTVEZOVkVWNVRtcG5kMDV0V1RWT1IwcHBXbFJCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiRTVIU1RVS1RucFplVTFYVlRWTmVtTTFUbnBSZUUxNlNtMU9WRkY2V2tkSmVVNVVSWGhOYWxrMFRVUmFiVTlVVW1sWmJWVjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW1jeVRsUm5NMDVVWnpWT2FrRjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwVVZsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTTjBKSWEwRUtaSGRDTVVGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNTVaM1k0YmtsQlFVRlJSQXBCUlZsM1VrRkpaMFZDWmtNMWFYcFFUM0F4VkhwcGIySmpaMWN5ZW5BdmRFZENZMWx6UTNkeGRrVXJPR05qVEVZemFWbERTVWRzTDJOWFUxWTNTa3R6Q2pGRU5EYzNaMjFSV1ZSSVlrVlhjbWhqZGpaU2MyeEdORzVNUzBJeVJHSjJUVUZ2UjBORGNVZFRUVFE1UWtGTlJFRXlaMEZOUjFWRFRWRkRVRmR6WVd3S1NVRlVWa3RCZVZCTWVGZDNTR1I2VUdGTFNISkxlbTV2ZEd0UE1IZEpMekZaUWtONVIweDZaVUp2YkdKQlprNVBWREpLU1VoNWRVcDBRMDFEVFVGc2VBcFdkVXR0ZUVKc1Frd3dORVpRUzFaR2VWaHVabVJGVGtreFdqTXpaV0pVYlhCdlUyVkpNVFIyTjFWU04zTlVUVXRvV1d0bWRUTnNWemhwWjBaSFp6MDlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgF149vUmjqFIJzFlSa1Idq9HbZsbnihZ7jqvZrPLRlVECFGsyOaNqgZb2WMleQ2wpXj4Zry7tGA8yMDI2MDcwMzEzMzQxOFowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNzAzMTMzNDE4WjAvBgkqhkiG9w0BCQQxIgQgXhKJrFXFmx1zJ35ANIW10zxYPuHmugBaSZ3tB14fSEgwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIwNymTEwTAdBJ/qowwZvyt5ixNAf+u2gleAxjBpYt4XDXFSIX3C/Px1sBTuYzzWNgYAjEAw+I3CPd8mFwjZ4NguyDe4xiAwPldtblIH9QcYtJo4G+GAyF36FD0a1wIsZj9wQlU"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"dHMM9Yc8sCjQNIIpXHtyOxzeOmhIc94x9pZ4+HXaRKM="},"signature":"MEUCIQCLZ49q9/lSz9Set334EnP4cCUVWyMd1pDmzi1dOW44yQIgck0/HAJJUItGTRSnXN5OGytkopoBzHxnXF08r9CVJMY="}}
|
build/torch211-cxx11-cu128-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4f2e6d0d961fbc71b3d0239221e87d5ed36e702237ead252e11acfe0e3c02ab7
|
| 3 |
+
size 608726816
|
build/torch211-cxx11-cu128-x86_64-linux/_ops.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import torch
|
| 2 |
-
from . import
|
| 3 |
-
ops = torch.ops.
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
-
return f"
|
|
|
|
| 1 |
import torch
|
| 2 |
+
from . import _mamba_ssm_cuda_2e4b976
|
| 3 |
+
ops = torch.ops._mamba_ssm_cuda_2e4b976
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
+
return f"_mamba_ssm_cuda_2e4b976::{op_name}"
|
build/torch211-cxx11-cu128-x86_64-linux/metadata.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
-
"id": "
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
@@ -26,8 +26,8 @@
|
|
| 26 |
"algorithm": "sha256",
|
| 27 |
"files": {
|
| 28 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 29 |
-
"
|
| 30 |
-
"_ops.py": "
|
| 31 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 32 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 33 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
|
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
+
"id": "_mamba_ssm_cuda_2e4b976",
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
|
|
| 26 |
"algorithm": "sha256",
|
| 27 |
"files": {
|
| 28 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 29 |
+
"_mamba_ssm_cuda_2e4b976.abi3.so": "Ty5tDZYfvHGz0COSIeh9XtNucCI36tJS4RrP4OPAKrc=",
|
| 30 |
+
"_ops.py": "+JzYZB0OFy2LuJrKfDpyk0JXsS8Iz9Eoy+pClu3+vVI=",
|
| 31 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 32 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 33 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
build/torch211-cxx11-cu128-x86_64-linux/metadata.json.sigstore
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHczCCBvmgAwIBAgIUXERNr8K9UqgRia3I4LgECVVc8VQwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDY1OTI2WhcNMjYwNjE4MDcwOTI2WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/NKkMJxzInga1xLEWy2HzXomLGGAEH91+VXfDc+2ATdAYF+yLKzXLsOE6cQv6PpA3coRSH982cSYPmqdxnwhfKOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUXFTg08r73Fq/hGDk2dLT1nERVR0wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZhwqjAAAEAwBHMEUCIGp4cj2h3s/I9bjYQ9Z6KXGPrXIYJLDALSHX3Y15OPQJAiEAhuWcn1ArASXR5gr9637FeAc28Fn9wjoD40uI38Mza4UwCgYIKoZIzj0EAwMDaAAwZQIwbsCS76/qHSCTmZ0KlwLUx7In4ZC0SJKVadFMCJDk0nfeDAwLPj/PWOk7p8mtSpTDAjEAwo6vm+vzLrWXTmitTUD6hP5nelgo/XKUNp4Oxey1PXUou08EGBiZA34KMmuTkHeU"},"tlogEntries":[{"logIndex":"1857846088","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781765966","inclusionPromise":{"signedEntryTimestamp":"MEUCIQDd9r9K8yXI0DU+fzyps8g+gyORRR1C8efFFhvya1nkLAIgeoQ+WlF50QUXukZzMovSsGmVirdTZVp5M8Ka+5fnl0Y="},"inclusionProof":{"logIndex":"1735941826","rootHash":"WbrMBOlQcnX2VzHAkaXmR0DMvGjAhcz+legO8NobQp0=","treeSize":"1735941833","hashes":["BtnQuqkL2eK/M/xk+zrqT2wgV2Q3FbtH3jt8IbypTYA=","OyHWViw5tJfuElzvbjB7bWH8V9rH++OT4nDDC8urPss=","HCI9dPj1HL8xiMcRQ1u8s6DgFOogu7FqtZbHIg7ip+4=","HgPVRDKWxs+5ohbI2Z3NkTsB+5AxjqyTEVX8Um6sPvo=","PzPZQTao82r8UZb+uogmPIRgXvP9JrW6RfoXjchnd+U=","4MfuBMJOt4DoI733kEulZxbftVCx/i8sS36wdSfvkFY=","Zj/ZY0eBi0gwVgBaoEOc3DrvBQix71RFSiNXK4sPli4=","Q7TdDu7WbPJBWdHFC09Xg6476ZNxZHnnk9EwtegIzjs=","TIqZLgA6aRph3LTsRCezw52mN9jLpsdRobJF4nyuDsk=","h8qmLE5ZM/33fkJcCpa82SXVNA+SsbijaPv7rG6xbIM=","dBGkiPcr9PeHrVdmtM5A5GHZYWYJVpP1XmzLNrrX7Pk=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735941833\nWbrMBOlQcnX2VzHAkaXmR0DMvGjAhcz+legO8NobQp0=\n\n— rekor.sigstore.dev wNI9ajBEAiBVeG1yd1ib85mvX2u/fDD9v6r6R3ZQMR2YD6eejvUS4wIgLWB36zMzm3V5GwJfCMEgJ0TZuloMlM1cPefAq/C0zRo=\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI0MDJlYjlkZDUxOWE1OTQ4ZjljMzBhNzRkYjhkOTNkMmM3MWZlN2VlMmI0YTRiZDEzZGU5OGRkNDEyNGU4YTdiIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJRlQwd080VllkNXA4dmIxejh2ak43dzM1cDM0WURSMGJ1d2laMzAybnBSd0FpRUEwb2lBWUlCbWRkeWo2WENiRnV6NDQwSXpCZXAxMFJmSnVaSE5jNE5ETnpnPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5adFowRjNTVUpCWjBsVldFVlNUbkk0U3psVmNXZFNhV0V6U1RSTVowVkRWbFpqT0ZaUmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJGa3hUMVJKTWxkb1kwNU5hbGwzVG1wRk5FMUVZM2RQVkVreVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVV2VGt0clRVcDRla2x1WjJFeGVFeEZWM2t5U0hwWWIyMU1SMGRCUlVnNU1TdFdXR1lLUkdNck1rRlVaRUZaUml0NVRFdDZXRXh6VDBVMlkxRjJObEJ3UVROamIxSlRTRGs0TW1OVFdWQnRjV1I0Ym5kb1prdFBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZZUmxSbkNqQTRjamN6Um5FdmFFZEVhekprVEZReGJrVlNWbEl3ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYjBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmtGU05rRklaMEZrWjBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWgzY1dwQlFVRkZRWGRDU0UxRlZVTkpSM0EwQ21OcU1tZ3pjeTlKT1dKcVdWRTVXalpMV0VkUWNsaEpXVXBNUkVGTVUwaFlNMWt4TlU5UVVVcEJhVVZCYUhWWFkyNHhRWEpCVTFoU05XZHlPVFl6TjBZS1pVRmpNamhHYmpsM2FtOUVOREIxU1RNNFRYcGhORlYzUTJkWlNVdHZXa2w2YWpCRlFYZE5SR0ZCUVhkYVVVbDNZbk5EVXpjMkwzRklVME5VYlZvd1N3cHNkMHhWZURkSmJqUmFRekJUU2t0V1lXUkdUVU5LUkdzd2JtWmxSRUYzVEZCcUwxQlhUMnMzY0RodGRGTndWRVJCYWtWQmQyODJkbTByZG5wTWNsZFlDbFJ0YVhSVVZVUTJhRkExYm1Wc1oyOHZXRXRWVG5BMFQzaGxlVEZRV0ZWdmRUQTRSVWRDYVZwQk16UkxUVzExVkd0SVpWVUtMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQg5H6MVT13SLGPELnSLFCvQlCt4bVtyHSE1556JQPJGPMCFGcwJaXCChyS030wbDhvwy6EmRu3GA8yMDI2MDYxODA2NTkyNlowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNjE4MDY1OTI2WjAvBgkqhkiG9w0BCQQxIgQgxyTra9fvfoO0Jm271UPaRnRjbDR9Yv1hKVVGYWdtNeowgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIxAJ0IHYJeQg/gtDJQKnAFKYXCG0K+XvqEl5HDNpnCYv71/8W5KmKoETWpPHRO+5Ka+AIwT9qZuno0Zcs+KbbWNoEfp2i1SZBDq6hPUtIZZwa4lWE0WdPaKeo34M/2NfJVAPBT"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"QC653VGaWUj5wwp0242T0scf5+4rSkvRPemN1BJOins="},"signature":"MEUCIFT0wO4VYd5p8vb1z8vjN7w35p34YDR0buwiZ302npRwAiEA0oiAYIBmddyj6XCbFuz440IzBep10RfJuZHNc4NDNzg="}}
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHTDCCBtGgAwIBAgIUcQ7JtXDBJvEIWvzlqKl/vSmRrnYwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzAzMTMzNDIwWhcNMjYwNzAzMTM0NDIwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERHc5QpoXeKMUQIg6wo9P1mwrzzZK3/alzbUPKjYXM2Rgmgdy6jW7KZD89HuBZySjcW5RpqLCBrXSyJO+P60HU6OCBfAwggXsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUxlvR8GkrmZHmdrYwwNganbwWBCswHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJlNGI5NzYyMWU5Mzc5NzQxMzJmNTQzZGIyNTExMjY4MDZmOTRiYmUwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjg2NTg3NTg5NjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnygv+UwAAAQDAEcwRQIhAI5qk4nNHPL42pbHxOTOmAkJ20S8XQh78IK7zA/n3YnlAiAVOETUNi0g0551G2aap4djDg6CiM/Tl7j+zdbYAWolJzAKBggqhkjOPQQDAwNpADBmAjEAn4BAcNUlrchltXOFu5bE+oSkg/8jbEfkND/Mf3JzIbeW4OzowMXxx1yuXR5jPC2BAjEAuN2x8cLFLjvO3MErNsd/ekp3eweydVVoPlIXZ+HL3js8S1I1j7jY/6laCo1zzvK0"},"tlogEntries":[{"logIndex":"2061241287","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783085660","inclusionPromise":{"signedEntryTimestamp":"MEQCIG86Cqh0X7H9W4cb18idgpdSySjao+wpyRqVcSRh+QiTAiB2rIl27fBRhn3tyVHlhmplu1Z9rEVXIdCErQdYRCMEqQ=="},"inclusionProof":{"logIndex":"1939337025","rootHash":"6q0wd1INgO+AwbXGXE8LHNWJD+achGJKFlxFrnNkvBs=","treeSize":"1939337070","hashes":["T86WrooJHTZJ6zz2kg+fJLhsGQBqiT1HZJPJFvZShjg=","oGvc2J8ySkXwZB4luR3iUcWBzIRmIPkGR2FGmGPBaoc=","q3kDAP0nS5DV144gQQjmfPbJTP1LpEVzn4M5CHdxkM4=","YJV6URO6PdUjA8hC8f454zEO9KpuR/uRc3e12wsmAdo=","jWOudmyvOFz/jojmkikryJh4FFiI4xTaOQTqxxwIddM=","BkB+gW66bQk/nZH+G/mBP8NmLL+WwJdk8mg3Pr/+CFE=","IZdlrN1VhC5en7uAO751ty+MPLN8mTONmizYlQ2+DxE=","ZwVhOIhjNPMClXSRMKKLbPt64fV9iQekLeKcr57b1Gw=","s5h75ZJxgo3ICUP+6oHnw6xd0IPQ9zP9DN2dbevEsoQ=","uX+G2XyrpFpfzpHxIMRb9vLFaSUsZr1fZfBXrYAh4E8=","dkxSFJ76QYfcYZd0FZ1ztNIYtDj8WF+edLXK0EwhgP0=","ue6cwlKg+AeO5/32qCILy2n85VkpmL7JNSD/vSD1PBQ=","5BcprHTbYFhJs9/zmopgvIomJpaJBQ2p5EneNzCzjhA=","BJg3Sjw0cmSlRwTc6wLrDTLBGKIa47J4xQdeTHs89p0=","nyXRyDPEOSJJ9t2F32eShKYeAGz2Z0OK/J6fnsiywOY=","lvtUm97dglxCtkz/pZESafc25No18+C5udmljqWIKjw=","Z1MWr1e8FrDf8zVzz0XKh0zpL1DZePbT3JTZ0UIXhhg=","I+dZvIwhBcmylTZ5mLoVIKIapQHRH789ramiw5T/osA=","RIZjwQJv61lwM5JOP8iNT/RxKPr522/etVqxVBWn7KA=","b69YlhA5qlDwN70us4bq9ysnikE1ulA7EwKBTb+atY0=","LM7F5iwbk8jG29X4FwpkCN6BqDCfuNQTlz5CyQWt87s=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1939337070\n6q0wd1INgO+AwbXGXE8LHNWJD+achGJKFlxFrnNkvBs=\n\n— rekor.sigstore.dev wNI9ajBFAiEA5ZZt9KM/yeuCk7YXEyYNDjrbwoUhLwKrN9ExtnQ/N0ICIBDKvhob2wjMMceawkkqT9cf3EKy40FxwkmGt95PKCBc\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlNGY4M2RiOTA5MDFjY2Q1NGMyYTdmMDFmZWI3ZThiOGIxYmQyYWY4ZmNmMGQ5MzFjZWE5OGY0YjUwMDU1MjRlIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJSG9ESCtZMDRaUXNmNlNuM0llcXFkaTJVekM5bGZsWUhydXVMNytzK0VkbUFpQTY0Y25KZ1ZRM0lhemlSSURMTEpJRlRzZ1pXU0pZdE0vWk11Z3lycEFRNWc9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFVSRU5EUW5SSFowRjNTVUpCWjBsVlkxRTNTblJZUkVKS2RrVkpWM1o2YkhGTGJDOTJVMjFTY201WmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVhwTlZFMTZUa1JKZDFkb1kwNU5hbGwzVG5wQmVrMVVUVEJPUkVsM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZTU0dNMVVYQnZXR1ZMVFZWUlNXYzJkMjg1VURGdGQzSjZlbHBMTXk5aGJIcGlWVkFLUzJwWldFMHlVbWR0WjJSNU5tcFhOMHRhUkRnNVNIVkNXbmxUYW1OWE5WSndjVXhEUW5KWVUzbEtUeXRRTmpCSVZUWlBRMEptUVhkbloxaHpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlY0YkhaU0NqaEhhM0p0V2todFpISlpkM2RPWjJGdVluZFhRa056ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVlV3V1dwck0wNXFTWGhhVkd0NlRucHJNMDVFUlhwTmJWa3hDazVFVG10WmFra3hUVlJGZVU1cVozZE9iVmsxVGtkS2FWcFVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEZPUkU1cldXcEpNVTFVUlhrS1RtcG5kMDV0V1RWT1IwcHBXbFJCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEVLVGtST2ExbHFTVEZOVkVWNVRtcG5kMDV0V1RWT1IwcHBXbFJCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiRTVIU1RVS1RucFplVTFYVlRWTmVtTTFUbnBSZUUxNlNtMU9WRkY2V2tkSmVVNVVSWGhOYWxrMFRVUmFiVTlVVW1sWmJWVjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW1jeVRsUm5NMDVVWnpWT2FrRjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0VKSWIwRUtaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNTVaM1lyVlhkQlFVRlJSQXBCUldOM1VsRkphRUZKTlhGck5HNU9TRkJNTkRKd1lraDRUMVJQYlVGclNqSXdVemhZVVdnM09FbExOM3BCTDI0eldXNXNRV2xCVms5RlZGVk9hVEJuQ2pBMU5URkhNbUZoY0RSa2FrUm5Oa05wVFM5VWJEZHFLM3BrWWxsQlYyOXNTbnBCUzBKblozRm9hMnBQVUZGUlJFRjNUbkJCUkVKdFFXcEZRVzQwUWtFS1kwNVZiSEpqYUd4MFdFOUdkVFZpUlN0dlUydG5MemhxWWtWbWEwNUVMMDFtTTBwNlNXSmxWelJQZW05M1RWaDRlREY1ZFZoU05XcFFRekpDUVdwRlFRcDFUako0T0dOTVJreHFkazh6VFVWeVRuTmtMMlZyY0RObGQyVjVaRlpXYjFCc1NWaGFLMGhNTTJwek9GTXhTVEZxTjJwWkx6WnNZVU52TVhwNmRrc3dDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgc2i0pRSpntP6D31AOjM2ewh3ggjuADSrJiNIvuO/2h0CFGXcqmvbD62C/l8Ubd7gc6wJDHVBGA8yMDI2MDcwMzEzMzQyMFowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNzAzMTMzNDIwWjAvBgkqhkiG9w0BCQQxIgQgyw1SsArrl/UVbqKIQJ2ZWHaXJlSU/b0r51i64OCRqtYwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIwC5zVw2dtsD2LFiWKzumI0ymiA7JHvyICv/bUV3RTO4Di6ltCWWovUBy42sKg0Jp+AjEAqmF2I+8OvcnPI8gDVYIMN5HhNTbBNYsQJnWWAQXAvV/bIHMaixWESkQcpQCs0soj"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"5Pg9uQkBzNVMKn8B/rfouLG9Kvj88NkxzqmPS1AFUk4="},"signature":"MEQCIHoDH+Y04ZQsf6Sn3Ieqqdi2UzC9lflYHruuL7+s+EdmAiA64cnJgVQ3IaziRIDLLJIFTsgZWSJYtM/ZMugyrpAQ5g=="}}
|
build/torch211-cxx11-cu130-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c5aff05bc30671a5e281dbac09629e720ac04a5a164669b2d5649a3c3f20473a
|
| 3 |
+
size 496401728
|
build/torch211-cxx11-cu130-x86_64-linux/_ops.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import torch
|
| 2 |
-
from . import
|
| 3 |
-
ops = torch.ops.
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
-
return f"
|
|
|
|
| 1 |
import torch
|
| 2 |
+
from . import _mamba_ssm_cuda_2e4b976
|
| 3 |
+
ops = torch.ops._mamba_ssm_cuda_2e4b976
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
+
return f"_mamba_ssm_cuda_2e4b976::{op_name}"
|
build/torch211-cxx11-cu130-x86_64-linux/metadata.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
-
"id": "
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
@@ -11,7 +11,8 @@
|
|
| 11 |
"archs": [
|
| 12 |
"10.0",
|
| 13 |
"11.0",
|
| 14 |
-
"12.0
|
|
|
|
| 15 |
"7.5",
|
| 16 |
"8.0",
|
| 17 |
"8.6",
|
|
@@ -24,8 +25,8 @@
|
|
| 24 |
"algorithm": "sha256",
|
| 25 |
"files": {
|
| 26 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 27 |
-
"
|
| 28 |
-
"_ops.py": "
|
| 29 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 30 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 31 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
|
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
+
"id": "_mamba_ssm_cuda_2e4b976",
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
|
|
| 11 |
"archs": [
|
| 12 |
"10.0",
|
| 13 |
"11.0",
|
| 14 |
+
"12.0",
|
| 15 |
+
"12.1+PTX",
|
| 16 |
"7.5",
|
| 17 |
"8.0",
|
| 18 |
"8.6",
|
|
|
|
| 25 |
"algorithm": "sha256",
|
| 26 |
"files": {
|
| 27 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 28 |
+
"_mamba_ssm_cuda_2e4b976.abi3.so": "xa/wW8MGcaXigdusCWKecgrASloWRmmy1WSaPD8gRzo=",
|
| 29 |
+
"_ops.py": "+JzYZB0OFy2LuJrKfDpyk0JXsS8Iz9Eoy+pClu3+vVI=",
|
| 30 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 31 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 32 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
build/torch211-cxx11-cu130-x86_64-linux/metadata.json.sigstore
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHcjCCBvmgAwIBAgIULB0xPrzv5I/vDAtGTMj/8QRzWRUwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDY1OTI4WhcNMjYwNjE4MDcwOTI4WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgofpbxeizZQTxPqKp48Nmk7kH9oZcUxxLtnY9uY+PlslEhyD7lUaPMEmBfoceALBJfBhsCsMWYJdKuGlsk+KuaOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUo19SSuXxgvKqDzjBCcqrYp3yamswHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZhxFuAAAEAwBHMEUCIE8IMAV24Bbx5fEKReVcXpejnPZvjGOmJ9/UyyT1qk0LAiEAptqH8Nef/HGOj1uYlLzZwA+67MN5dHhuQ+044dvMhBowCgYIKoZIzj0EAwMDZwAwZAIwRz5RQkwiGR+i4i2NfuTYLCF8YME6B3W3k1czrAOmpE4yUvqcW9LpC4pD2ZJXMcgDAjA8w20Q2/+BN6K+l59qYlt8MsSn/g51Qdq5mEn6N0dTgKmDuXTTVGN4RSqAw7QuMy0="},"tlogEntries":[{"logIndex":"1857846155","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781765968","inclusionPromise":{"signedEntryTimestamp":"MEYCIQDpJS1L8c1IHrU/CVtbItwGwmP7cOsk+ia5D8gMOuK0WAIhAKh1uHhmba+Yktxa/O6b/zGQQV9DHr/BMaezNOWyFg2w"},"inclusionProof":{"logIndex":"1735941893","rootHash":"8W0YRS3Tbi0J2X3kJwNB6hilyc2R6unwojUYH/Onnu4=","treeSize":"1735941894","hashes":["GOu0C0t4GFckcqQfCpyiPi9NSEFg3CZq4P4jHsoXf14=","tVvPUmt0XBkw14p+6aRX4YCsOwvaiNRL7PhmIlMqIHE=","I0d0D9LPIksW5sRdo73kOhT8Y/fQxDpijIkJ4M+9V1g=","Zj/ZY0eBi0gwVgBaoEOc3DrvBQix71RFSiNXK4sPli4=","Q7TdDu7WbPJBWdHFC09Xg6476ZNxZHnnk9EwtegIzjs=","TIqZLgA6aRph3LTsRCezw52mN9jLpsdRobJF4nyuDsk=","h8qmLE5ZM/33fkJcCpa82SXVNA+SsbijaPv7rG6xbIM=","dBGkiPcr9PeHrVdmtM5A5GHZYWYJVpP1XmzLNrrX7Pk=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735941894\n8W0YRS3Tbi0J2X3kJwNB6hilyc2R6unwojUYH/Onnu4=\n\n— rekor.sigstore.dev wNI9ajBFAiEA7vTTle6Mhbb3m5YmmRae998RJ54wZ1GygP8FD0pJ+twCIG/EFOGHSh1LPLgblaS1jXL1q9H+oQd34fqFXqsUGqw5\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlZmEyY2Q0NzMxMmY5OTkxNzkxMzIyZTgyMTU2NGFiNWY3MGViYWRkYWRjZGFjNGExNDNkOWJkNTI5YjZlODAxIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUNBOWRQU2xtUkhVd1FZZ2Z2UzNCNzBZeDRUc1pibDFlbTN3T2crcWpFSHJ3SWhBTEpzTlNXYUJreTNTZ2txbmhIQWxjdzFibldMVU9pM29lTHp4UERZdTV2WCIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpha05EUW5adFowRjNTVUpCWjBsVlRFSXdlRkJ5ZW5ZMVNTOTJSRUYwUjFSTmFpODRVVko2VjFKVmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJGa3hUMVJKTkZkb1kwNU5hbGwzVG1wRk5FMUVZM2RQVkVrMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZuYjJad1luaGxhWHBhVVZSNFVIRkxjRFE0VG0xck4ydElPVzlhWTFWNGVFeDBibGtLT1hWWksxQnNjMnhGYUhsRU4yeFZZVkJOUlcxQ1ptOWpaVUZNUWtwbVFtaHpRM05OVjFsS1pFdDFSMnh6YXl0TGRXRlBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZ2TVRsVENsTjFXSGhuZGt0eFJIcHFRa05qY1hKWmNETjVZVzF6ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYjBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmtGU05rRklaMEZrWjBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWg0Um5WQlFVRkZRWGRDU0UxRlZVTkpSVGhKQ2sxQlZqSTBRbUo0TldaRlMxSmxWbU5ZY0dWcWJsQmFkbXBIVDIxS09TOVZlWGxVTVhGck1FeEJhVVZCY0hSeFNEaE9aV1l2U0VkUGFqRjFXV3hNZWxvS2QwRXJOamROVGpWa1NHaDFVU3N3TkRSa2RrMW9RbTkzUTJkWlNVdHZXa2w2YWpCRlFYZE5SRnAzUVhkYVFVbDNVbm8xVWxGcmQybEhVaXRwTkdreVRncG1kVlJaVEVOR09GbE5SVFpDTTFjemF6RmplbkpCVDIxd1JUUjVWWFp4WTFjNVRIQkROSEJFTWxwS1dFMWpaMFJCYWtFNGR6SXdVVEl2SzBKT05rc3JDbXcxT1hGWmJIUTRUWE5UYmk5bk5URlJaSEUxYlVWdU5rNHdaRlJuUzIxRWRWaFVWRlpIVGpSU1UzRkJkemRSZFUxNU1EMEtMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgZU084/b6CYI86/XNIPIERo0S3kyxCJa5uQsVLVMNmtoCFQDJm7D4uPYN85Aik2wFM5QYxW8DFhgPMjAyNjA2MTgwNjU5MjhaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHbMIIB1wIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDYxODA2NTkyOFowLwYJKoZIhvcNAQkEMSIEIMVF7tgmZ2i5sUfSjE8lEkaStqM9+NrqOjVeti0RNrV2MIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRnMGUCMQDe/bg2M2COmmTOmaWAILOQgjCUClJaxprKKmN9Ip2/aZ/gf6d+KlqHVDciczzQz+cCMA75ixoaLhfUnRRVP+vxMMeB9CF6TcERpN1slsye25BaStqC94NTO+FOHDR3rqFQGA=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"76LNRzEvmZF5EyLoIVZKtfcOut2tzaxKFD2b1Sm26AE="},"signature":"MEYCIQCA9dPSlmRHUwQYgfvS3B70Yx4TsZbl1em3wOg+qjEHrwIhALJsNSWaBky3SgkqnhHAlcw1bnWLUOi3oeLzxPDYu5vX"}}
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHTDCCBtKgAwIBAgIUddQ3X+lFi9oJvb5J6e5raCqNGOgwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzAzMTMzNDIyWhcNMjYwNzAzMTM0NDIyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBN3JHjSEqplb9wumQW8YiiGAvUjO4qkr8MqcEHOAYSi+cOC0iTrIgEQvinkUBIPEvCtS3Z5f1Qqf+iK+c6nuG6OCBfEwggXtMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUlN9p01nRolcIYkZlnWr85Lkwh60wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJlNGI5NzYyMWU5Mzc5NzQxMzJmNTQzZGIyNTExMjY4MDZmOTRiYmUwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjg2NTg3NTg5NjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiwYKKwYBBAHWeQIEAgR9BHsAeQB3AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnygwAEsAAAQDAEgwRgIhAO+z4SUde/4XjnxVZ9asSS04Vs6dRFGflyYwu9SIYsvlAiEA+z07gZTLUaBvTFn3LwXZaZtagB3Id5dQtxBjC2eMucEwCgYIKoZIzj0EAwMDaAAwZQIwGmq8bFjdyqvUtfmjqI0STvKAOQ1hIpTukXLWhp30S8IlHIaCXonEKoqlcwltm7GTAjEAojKQNwxU2z5WkMQQniGLBIP+N6Lyi3J9lQXRo4+mgpJ9oTE+YdtTELvoah3jBuxI"},"tlogEntries":[{"logIndex":"2061241908","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783085663","inclusionPromise":{"signedEntryTimestamp":"MEYCIQDNqu5q03BuhF76xYUcVWGV5C3sUU0XobHmlaSIJaZ5DQIhAJVgf+zncz0kGxAl4vwijAqdmITBnhBM+a6Dz9b8Z/+4"},"inclusionProof":{"logIndex":"1939337646","rootHash":"3C+noGoT4FmdIuVTizJaoQm6VNVBYuU57m8LHPBPMXo=","treeSize":"1939338121","hashes":["eORFUhxE+Fi7bUyR0GRZdugd/+6VOQfOVaSEcEpmRJI=","BbNn021DULBC1bPscukGQ4QKONd7xjUs/mgo1uB5ZBU=","WSKiOV7jjQVnr0NCsrN3+IhaUlcRg2cBXMK29UKIh10=","O5m9+4zppPVsq2s2IuRzEDkyZxKhoPMPBMMj7zVJ0qI=","2CIsXziSM3WK7YcHbKmjg4/YQk2rrcpohVzH2Q917yI=","FC1jTq6N3p5jQ0Tu155x2w1IHIYF4UsKK94H6fBtdcU=","4LBoy7xP5SywGarpMdyyibXTTOAYWM3DhakMetWXgcY=","at0BMioReFfQUJ6isVoixcbPcOW5lnVSBpFomYyzWvs=","n50kMCd6i6RmefEH9RcjB/KJ9e4j7eI5wQUAx7+0zto=","DsOPb6I67+ElLyJAS9yMR2r9kHqJIJLFldPObUfHl+Q=","DzrLfiUQC199WzQ89kUKfq6O8+cY/p7Y5Y+TrQlGzKo=","ue6cwlKg+AeO5/32qCILy2n85VkpmL7JNSD/vSD1PBQ=","5BcprHTbYFhJs9/zmopgvIomJpaJBQ2p5EneNzCzjhA=","BJg3Sjw0cmSlRwTc6wLrDTLBGKIa47J4xQdeTHs89p0=","nyXRyDPEOSJJ9t2F32eShKYeAGz2Z0OK/J6fnsiywOY=","lvtUm97dglxCtkz/pZESafc25No18+C5udmljqWIKjw=","Z1MWr1e8FrDf8zVzz0XKh0zpL1DZePbT3JTZ0UIXhhg=","I+dZvIwhBcmylTZ5mLoVIKIapQHRH789ramiw5T/osA=","RIZjwQJv61lwM5JOP8iNT/RxKPr522/etVqxVBWn7KA=","b69YlhA5qlDwN70us4bq9ysnikE1ulA7EwKBTb+atY0=","LM7F5iwbk8jG29X4FwpkCN6BqDCfuNQTlz5CyQWt87s=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1939338121\n3C+noGoT4FmdIuVTizJaoQm6VNVBYuU57m8LHPBPMXo=\n\n— rekor.sigstore.dev wNI9ajBFAiBGcpP2SJy4MhbPqZWSCNErleyAxXQsnS8nhMDUQKt3ggIhAP6qmAA5RS2z+RbWyAqnSBPT/eOy+vIlRS/kALir8moE\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJhMGMyMmFkNDMxZTRmODlmZWYxMjZjMTE2YmFiYjc0NWZjOWE5MDg3MDA0ZjAzZGI4NWY1MDQ5N2VhNGRiNzY1In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUMyWTNGclFia2p6Y1cwZ1diRkNZM2Q5aklPak5DVUdubW9LYlROS3U4VFFBSWdLL2huYUQwMmpqM2tlMiswM0FNeElNaExnTXdVZmR1TjVFaWRFVXNFRFVJPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFVSRU5EUW5STFowRjNTVUpCWjBsVlpHUlJNMWdyYkVacE9XOUtkbUkxU2pabE5YSmhRM0ZPUjA5bmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVhwTlZFMTZUa1JKZVZkb1kwNU5hbGwzVG5wQmVrMVVUVEJPUkVsNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZDVGpOS1NHcFRSWEZ3YkdJNWQzVnRVVmM0V1dscFIwRjJWV3BQTkhGcmNqaE5jV01LUlVoUFFWbFRhU3RqVDBNd2FWUnlTV2RGVVhacGJtdFZRa2xRUlhaRGRGTXpXalZtTVZGeFppdHBTeXRqTm01MVJ6WlBRMEptUlhkbloxaDBUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZzVGpsd0NqQXhibEp2YkdOSldXdGFiRzVYY2pnMVRHdDNhRFl3ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVlV3V1dwck0wNXFTWGhhVkd0NlRucHJNMDVFUlhwTmJWa3hDazVFVG10WmFra3hUVlJGZVU1cVozZE9iVmsxVGtkS2FWcFVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEZPUkU1cldXcEpNVTFVUlhrS1RtcG5kMDV0V1RWT1IwcHBXbFJCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEVLVGtST2ExbHFTVEZOVkVWNVRtcG5kMDV0V1RWT1IwcHBXbFJCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiRTVIU1RVS1RucFplVTFYVlRWTmVtTTFUbnBSZUUxNlNtMU9WRkY2V2tkSmVVNVVSWGhOYWxrMFRVUmFiVTlVVW1sWmJWVjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW1jeVRsUm5NMDVVWnpWT2FrRjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwZDFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT1VKSWMwRUtaVkZDTTBGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNTVaM2RCUlhOQlFVRlJSQXBCUldkM1VtZEphRUZQSzNvMFUxVmtaUzgwV0dwdWVGWmFPV0Z6VTFNd05GWnpObVJTUmtkbWJIbFpkM1U1VTBsWmMzWnNRV2xGUVN0Nk1EZG5XbFJNQ2xWaFFuWlVSbTR6VEhkWVdtRmFkR0ZuUWpOSlpEVmtVWFI0UW1wRE1tVk5kV05GZDBObldVbExiMXBKZW1vd1JVRjNUVVJoUVVGM1dsRkpkMGR0Y1RnS1lrWnFaSGx4ZGxWMFptMXFjVWt3VTFSMlMwRlBVVEZvU1hCVWRXdFlURmRvY0RNd1V6aEpiRWhKWVVOWWIyNUZTMjl4YkdOM2JIUnROMGRVUVdwRlFRcHZha3RSVG5kNFZUSjZOVmRyVFZGUmJtbEhURUpKVUN0T05reDVhVE5LT1d4UldGSnZOQ3R0WjNCS09XOVVSU3RaWkhSVVJVeDJiMkZvTTJwQ2RYaEpDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQg1xudnUbJNJNBkZuRgfoXOQYfKzCHdAoAOoL2aFhL81kCFDzwPlMo0Ny49RPV8DzCUJbLdspHGA8yMDI2MDcwMzEzMzQyMlowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNzAzMTMzNDIyWjAvBgkqhkiG9w0BCQQxIgQgyrpW+WYeHm6o9wdARpo0ODkNMhCVf17cIetgXPnF3QEwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIxAK7V9J04t+QjWBUan3rjLUy50xFDHPe2VQQjWnXq8DXbFo/H5spICcMwWQRUfi2ZiwIwClA+j9c4yZzL0lMflFq4bdL/2dN0HkPeB5FHxcsycGWQVOXbNcIpW3Fy4BZ5CdfU"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"oMIq1DHk+J/vEmwRa6u3RfyakIcATwPbhfUEl+pNt2U="},"signature":"MEUCIQC2Y3FrQbkjzcW0gWbFCY3d9jIOjNCUGnmoKbTNKu8TQAIgK/hnaD02jj3ke2+03AMxIMhLgMwUfduN5EidEUsEDUI="}}
|
build/torch212-cxx11-cu126-x86_64-linux/{_mamba_ssm_cuda_785446d.abi3.so → _mamba_ssm_cuda_2e4b976.abi3.so}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c05d89323944ad6c0e94573aebaa7bd15ccecf4ed1919d3065d4543a64915551
|
| 3 |
+
size 442378000
|
build/torch212-cxx11-cu126-x86_64-linux/_ops.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import torch
|
| 2 |
-
from . import
|
| 3 |
-
ops = torch.ops.
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
-
return f"
|
|
|
|
| 1 |
import torch
|
| 2 |
+
from . import _mamba_ssm_cuda_2e4b976
|
| 3 |
+
ops = torch.ops._mamba_ssm_cuda_2e4b976
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
+
return f"_mamba_ssm_cuda_2e4b976::{op_name}"
|
build/torch212-cxx11-cu126-x86_64-linux/metadata.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
-
"id": "
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
@@ -23,8 +23,8 @@
|
|
| 23 |
"algorithm": "sha256",
|
| 24 |
"files": {
|
| 25 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 26 |
-
"
|
| 27 |
-
"_ops.py": "
|
| 28 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 29 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 30 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
|
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
+
"id": "_mamba_ssm_cuda_2e4b976",
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
|
|
| 23 |
"algorithm": "sha256",
|
| 24 |
"files": {
|
| 25 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 26 |
+
"_mamba_ssm_cuda_2e4b976.abi3.so": "wF2JMjlErWwOlFc666p70VzOz07RkZ0wZdRUOmSRVVE=",
|
| 27 |
+
"_ops.py": "+JzYZB0OFy2LuJrKfDpyk0JXsS8Iz9Eoy+pClu3+vVI=",
|
| 28 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 29 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 30 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
build/torch212-cxx11-cu126-x86_64-linux/metadata.json.sigstore
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHcjCCBvmgAwIBAgIUFQycNKlOYzumi46Sf462lLEzUg8wCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDY1OTI5WhcNMjYwNjE4MDcwOTI5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmuhVBab+VqzvkZhb+i/T52EFbOrXNdOmSIlx/106rFblPw1QSk66cb//MLeMELs7KxrzuHspB6FiY5XzkfShWKOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUPF4rmwbN6fSoX6VgD4GcrpEV9RAwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZhxdBAAAEAwBHMEUCIQD32LYF9TAgMMfRrZqjPne+w+lYUfgfCOaJo2xYvWW1ZgIgbqlmbXZaQRdefpJFvfeAZkk3XXdYGMCfC/ahcGKkEf4wCgYIKoZIzj0EAwMDZwAwZAIwVS88Zop+zMezxr5XiNH3RsROoZ/OUWA3jjq3segJH/YwSAEzrrRaw6yBkicy1VduAjA1rsYQqx21ekD3upF0fGQfaTcF8koFiMCzb7o3BU/CCI2lWpZOfbVe2yfb/ARN77g="},"tlogEntries":[{"logIndex":"1857846197","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781765969","inclusionPromise":{"signedEntryTimestamp":"MEQCICdc1oq55Vgzkd7/VVorVuJ5z8UX4TFB2M82QhEr8YwfAiBiCrMzlUg9FltLA2NOFiIfzWFpjSmpWDtIS91G1QUDIw=="},"inclusionProof":{"logIndex":"1735941935","rootHash":"Uy8J72GH0z9A+iQ7dDveWGw9YLb6AiGC11tsUHkilV4=","treeSize":"1735941940","hashes":["1rlmh5+zDjjUIpsMQnn+nvaT3aQXEYR88cqfRbe6UPw=","/MbZtYZaBkrLwp6MOYbsGzjiVKdW4AjK1OHhYHaKdB0=","ldYsjgI9b/M4TTF36w6F/GEWGLS9zt8i+ORKnwUhg5U=","7Gb87c7D+NJL9brYcmaiqmXZAs3COClr/Ppex1m2gNk=","1dy1db1UxECvaJFSozZjLZDqPfVA1RrnlXZkSZJuP7o=","BB97qlwVzyc5X3CFK32LTQ9Uz98Snt4remtrrwkXIkc=","I0d0D9LPIksW5sRdo73kOhT8Y/fQxDpijIkJ4M+9V1g=","Zj/ZY0eBi0gwVgBaoEOc3DrvBQix71RFSiNXK4sPli4=","Q7TdDu7WbPJBWdHFC09Xg6476ZNxZHnnk9EwtegIzjs=","TIqZLgA6aRph3LTsRCezw52mN9jLpsdRobJF4nyuDsk=","h8qmLE5ZM/33fkJcCpa82SXVNA+SsbijaPv7rG6xbIM=","dBGkiPcr9PeHrVdmtM5A5GHZYWYJVpP1XmzLNrrX7Pk=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735941940\nUy8J72GH0z9A+iQ7dDveWGw9YLb6AiGC11tsUHkilV4=\n\n— rekor.sigstore.dev wNI9ajBGAiEA7AjyqVxlaEu6LU79nXce7EK4+A8aaxvX6VB1kfiZfCECIQDHzkXOkzXHql1TYHbcSoujnXxETfq//OZMOIrW+kpNWQ==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJhYjdhMTQ4Zjg4MmM5YmEwMzM1YjNiNjczN2FhZjA3ZjE3ZjI2YTRmNzU5MmY0M2RmODIwOGZiOGNhYWFiMzhhIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUNUN1M2MFljVGMrdEZTQmV1TE5vOCs4M245aTNhK3ZpbjJsNmtSenRIcG9RSWhBSUFkdVY4NHNWdnNpeVFibzZQRi9YSEpva1I2M3huWDVGU3JPNGtudVE1byIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpha05EUW5adFowRjNTVUpCWjBsVlJsRjVZMDVMYkU5WmVuVnRhVFEyVTJZME5qSnNURVY2VldjNGQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJGa3hUMVJKTlZkb1kwNU5hbGwzVG1wRk5FMUVZM2RQVkVrMVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZ0ZFdoV1FtRmlLMVp4ZW5acldtaGlLMmt2VkRVeVJVWmlUM0pZVG1SUGJWTkpiSGdLTHpFd05uSkdZbXhRZHpGUlUyczJObU5pTHk5TlRHVk5SVXh6TjB0NGNucDFTSE53UWpaR2FWazFXSHByWmxOb1YwdFBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZRUmpSeUNtMTNZazQyWmxOdldEWldaMFEwUjJOeWNFVldPVkpCZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYjBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmtGU05rRklaMEZrWjBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWg0WkVKQlFVRkZRWGRDU0UxRlZVTkpVVVF6Q2pKTVdVWTVWRUZuVFUxbVVuSmFjV3BRYm1VcmR5dHNXVlZtWjJaRFQyRktieko0V1haWFZ6RmFaMGxuWW5Gc2JXSllXbUZSVW1SbFpuQktSblptWlVFS1dtdHJNMWhZWkZsSFRVTm1ReTloYUdOSFMydEZaalIzUTJkWlNVdHZXa2w2YWpCRlFYZE5SRnAzUVhkYVFVbDNWbE00T0ZwdmNDdDZUV1Y2ZUhJMVdBcHBUa2d6VW5OU1QyOWFMMDlWVjBFemFtcHhNM05sWjBwSUwxbDNVMEZGZW5KeVVtRjNObmxDYTJsamVURldaSFZCYWtFeGNuTlpVWEY0TWpGbGEwUXpDblZ3UmpCbVIxRm1ZVlJqUmpocmIwWnBUVU42WWpkdk0wSlZMME5EU1RKc1YzQmFUMlppVm1VeWVXWmlMMEZTVGpjM1p6MEtMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyzADAgEAMIICwgYJKoZIhvcNAQcCoIICszCCAq8CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgHmSydlImbguPDFWZh+oSw7aeAazLhs45mAlyoDN8EMcCFQCM9i35JTj/fMOAnLls79WfpHjoBBgPMjAyNjA2MTgwNjU5MjlaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHcMIIB2AIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDYxODA2NTkyOVowLwYJKoZIhvcNAQkEMSIEIISdT+0T1IG+e9u+WuKw1xgoGhiroyxnbIm+AkelPCsMMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRoMGYCMQD6+LtMqEWYDZMCWVCGauRHyUL2dspphi4EUc06yYtqhJyajp1Z7ChARYEZ1oxP7AcCMQD87v3siefd3aFcu/qpMJy6PvkUOG8oKAWlL/v48/pTnH1ndGTX0kz8+J4c2JNGPho="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"q3oUj4gsm6AzWztnN6rwfxfyak91kvQ9+CCPuMqqs4o="},"signature":"MEYCIQCT7S60YcTc+tFSBeuLNo8+83n9i3a+vin2l6kRztHpoQIhAIAduV84sVvsiyQbo6PF/XHJokR63xnX5FSrO4knuQ5o"}}
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHSjCCBtGgAwIBAgIUUJjfNKu68k4GUtHKhBb6Eh3bA1QwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzAzMTMzNDI2WhcNMjYwNzAzMTM0NDI2WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXmKWVWCUz5urm/H55S1AFLmkZdPPYLrPr6GH808cOyLGJVjzg65zJOYQxj+XGepQYwvtYBpomzhbu58LZeZsSqOCBfAwggXsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUV+MqitM6RGg9NSWDJdnO0QV+rq8wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJlNGI5NzYyMWU5Mzc5NzQxMzJmNTQzZGIyNTExMjY4MDZmOTRiYmUwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjg2NTg3NTg5NjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnygwEYAAAAQDAEcwRQIhANfidHXjINp4GCImwRF42vyFwIrwkj6aa3HiDlpTuBeFAiBEdoYyUOSQf2GZ3ule9vHVQAw4VZtY9TE7v/fSgnA0JDAKBggqhkjOPQQDAwNnADBkAjAgesD7ZLtCNynKp/uKP5I1k/UIzbEMK3cKL941qjx9ETpQ/IBV7R60yWVLKCkE6LkCMDSA4/7A7SNX40FuY0dSWKT5OYvK5Sh3h8XVpflV2Kr5LPJxXgzEn+Dq7KZuoblYIQ=="},"tlogEntries":[{"logIndex":"2061242649","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783085667","inclusionPromise":{"signedEntryTimestamp":"MEYCIQCdKTzyN5ACoz7y797EjStZtK5Gn4+l0QPG4lcgOYSIyQIhAKw3zL5UplfeWOYeDnHxo5jIxmDy1IkCK+V/xychMvL/"},"inclusionProof":{"logIndex":"1939338387","rootHash":"ph6AFlrFvXkccm+oRbi7a7PoFtqxACNoxPgwNG4uJHE=","treeSize":"1939338539","hashes":["AagxrWRp8NyclzJfSldCIfr4BNMmwxoATDFYSeowGvk=","C6OaEQUV5tZ9z+UdkFNXRylPVA47UJgQkzpwRK/qEvQ=","aY5fR8WkB/ciOcMdrpeXILwrDI1K0LT/4RPuZTmU+fM=","ZuJRa844f5KT5h/FHqcsRM4H5+gA5vL/Qr+2blVrhJo=","Ggn13FFycnzZnXQ0xKWS8HvcoY9oBpXIg18lr3TzkKQ=","b06IVRv1fyQLvCq2VPU8NqGuslPQ2RF6507ITmv0ork=","HB02knQZeux/rxP1RErY2mTv+wh9h6iQDSP3mfvqDno=","iYP4nZNGXEcZW79lN4xQhulIbYUObSR9AKcfRPFG7xk=","mywTrqqgp/ADmPtX+d5cvEH9AZDR7vhO1Cg28YImaEQ=","vPL+EUF/DLmK2Fbco/6ejKabFfks0ZfcRSbeaS+NZuw=","DzrLfiUQC199WzQ89kUKfq6O8+cY/p7Y5Y+TrQlGzKo=","ue6cwlKg+AeO5/32qCILy2n85VkpmL7JNSD/vSD1PBQ=","5BcprHTbYFhJs9/zmopgvIomJpaJBQ2p5EneNzCzjhA=","BJg3Sjw0cmSlRwTc6wLrDTLBGKIa47J4xQdeTHs89p0=","nyXRyDPEOSJJ9t2F32eShKYeAGz2Z0OK/J6fnsiywOY=","lvtUm97dglxCtkz/pZESafc25No18+C5udmljqWIKjw=","Z1MWr1e8FrDf8zVzz0XKh0zpL1DZePbT3JTZ0UIXhhg=","I+dZvIwhBcmylTZ5mLoVIKIapQHRH789ramiw5T/osA=","RIZjwQJv61lwM5JOP8iNT/RxKPr522/etVqxVBWn7KA=","b69YlhA5qlDwN70us4bq9ysnikE1ulA7EwKBTb+atY0=","LM7F5iwbk8jG29X4FwpkCN6BqDCfuNQTlz5CyQWt87s=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1939338539\nph6AFlrFvXkccm+oRbi7a7PoFtqxACNoxPgwNG4uJHE=\n\n— rekor.sigstore.dev wNI9ajBFAiAXJqyclxikSUbntAldCX4LZcADIYOeSE65fu9t/udKlQIhAJWqcTzdIb1RUyyVatrfbQdzN7hwgo5OiG/C9hFUns7M\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJmNmE0NDc0NzVkODRmZDc5ZDI2NDJjNzcwOWZmZTkyODU1OWE1Y2E4MGIyMzQ2MTEyNGIwNGQ5MzE1MjRlNDRkIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUR1d1dUN1d5cHRVMDJHK2U1Sm9ERlVjK1dQQTJLc3YxODU3ZkxONVhodm1BSWdOUDI5eEtoRHRKTXdDeWRVb2d4eVdDdGw2SWFiV0kyV0pvTmlXWGVMZ0F3PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFRha05EUW5SSFowRjNTVUpCWjBsVlZVcHFaazVMZFRZNGF6UkhWWFJJUzJoQ1lqWkZhRE5pUVRGUmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVhwTlZFMTZUa1JKTWxkb1kwNU5hbGwzVG5wQmVrMVVUVEJPUkVreVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZZYlV0WFZsZERWWG8xZFhKdEwwZzFOVk14UVVaTWJXdGFaRkJRV1V4eVVISTJSMGdLT0RBNFkwOTVURWRLVm1wNlp6WTFla3BQV1ZGNGFpdFlSMlZ3VVZsM2RuUlpRbkJ2Ylhwb1luVTFPRXhhWlZwelUzRlBRMEptUVhkbloxaHpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZXSzAxeENtbDBUVFpTUjJjNVRsTlhSRXBrYms4d1VWWXJjbkU0ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVlV3V1dwck0wNXFTWGhhVkd0NlRucHJNMDVFUlhwTmJWa3hDazVFVG10WmFra3hUVlJGZVU1cVozZE9iVmsxVGtkS2FWcFVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEZPUkU1cldXcEpNVTFVUlhrS1RtcG5kMDV0V1RWT1IwcHBXbFJCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEVLVGtST2ExbHFTVEZOVkVWNVRtcG5kMDV0V1RWT1IwcHBXbFJCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiRTVIU1RVS1RucFplVTFYVlRWTmVtTTFUbnBSZUUxNlNtMU9WRkY2V2tkSmVVNVVSWGhOYWxrMFRVUmFiVTlVVW1sWmJWVjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW1jeVRsUm5NMDVVWnpWT2FrRjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0VKSWIwRUtaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNTVaM2RGV1VGQlFVRlJSQXBCUldOM1VsRkphRUZPWm1sa1NGaHFTVTV3TkVkRFNXMTNVa1kwTW5aNVJuZEpjbmRyYWpaaFlUTklhVVJzY0ZSMVFtVkdRV2xDUldSdldYbFZUMU5SQ21ZeVIxb3pkV3hsT1haSVZsRkJkelJXV25SWk9WUkZOM1l2WmxObmJrRXdTa1JCUzBKblozRm9hMnBQVUZGUlJFRjNUbTVCUkVKclFXcEJaMlZ6UkRjS1dreDBRMDU1Ymt0d0wzVkxVRFZKTVdzdlZVbDZZa1ZOU3pOalMwdzVOREZ4YW5nNVJWUndVUzlKUWxZM1VqWXdlVmRXVEV0RGEwVTJUR3REVFVSVFFRbzBMemRCTjFOT1dEUXdSblZaTUdSVFYwdFVOVTlaZGtzMVUyZ3phRGhZVm5CbWJGWXlTM0kxVEZCS2VGaG5la1Z1SzBSeE4wdGFkVzlpYkZsSlVUMDlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgLT0ikeAqTjLmOljdLUcOA0z1cRWv5CjxL4/AQyCWtBQCFQCsEQuC9iANjG4paEHHwfg+kWGRAhgPMjAyNjA3MDMxMzM0MjZaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHbMIIB1wIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDcwMzEzMzQyNlowLwYJKoZIhvcNAQkEMSIEICXK9sBA6rBM5shX7qrx/ULl4llJ8lxSnh0okb1iI6H0MIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRnMGUCMFphFHSwGxVK9yLwRZvSEgBls5Bi8StgGHl2m4hUQBWWbco27SSCF06OAeZtvIZyygIxAPNNnGg2SBwqax49KbL4j1UKuZe2R2RJSjsJ4G7BGGu705Qx/woJPvXJ/p903bbG6g=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"9qRHR12E/XnSZCx3Cf/pKFWaXKgLI0YRJLBNkxUk5E0="},"signature":"MEUCIQDuwWT7WyptU02G+e5JoDFUc+WPA2Ksv1857fLN5XhvmAIgNP29xKhDtJMwCydUogxyWCtl6IabWI2WJoNiWXeLgAw="}}
|
build/torch212-cxx11-cu130-x86_64-linux/_mamba_ssm_cuda_2e4b976.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5916c70a4df881b5c2db38a6764a65738630f4bb8bd2f77e16f7dcb453a5be75
|
| 3 |
+
size 496412112
|
build/torch212-cxx11-cu130-x86_64-linux/_mamba_ssm_cuda_785446d.abi3.so
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:887e8804bbb599b45d1038fef7ce4d0246d0f3c4f57b9f9f8fe57458a22e97f2
|
| 3 |
-
size 446636520
|
|
|
|
|
|
|
|
|
|
|
|
build/torch212-cxx11-cu130-x86_64-linux/_ops.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import torch
|
| 2 |
-
from . import
|
| 3 |
-
ops = torch.ops.
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
-
return f"
|
|
|
|
| 1 |
import torch
|
| 2 |
+
from . import _mamba_ssm_cuda_2e4b976
|
| 3 |
+
ops = torch.ops._mamba_ssm_cuda_2e4b976
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
+
return f"_mamba_ssm_cuda_2e4b976::{op_name}"
|
build/torch212-cxx11-cu130-x86_64-linux/metadata.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
-
"id": "
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
@@ -11,7 +11,8 @@
|
|
| 11 |
"archs": [
|
| 12 |
"10.0",
|
| 13 |
"11.0",
|
| 14 |
-
"12.0
|
|
|
|
| 15 |
"7.5",
|
| 16 |
"8.0",
|
| 17 |
"8.6",
|
|
@@ -24,8 +25,8 @@
|
|
| 24 |
"algorithm": "sha256",
|
| 25 |
"files": {
|
| 26 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 27 |
-
"
|
| 28 |
-
"_ops.py": "
|
| 29 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 30 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 31 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
|
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
+
"id": "_mamba_ssm_cuda_2e4b976",
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
|
|
| 11 |
"archs": [
|
| 12 |
"10.0",
|
| 13 |
"11.0",
|
| 14 |
+
"12.0",
|
| 15 |
+
"12.1+PTX",
|
| 16 |
"7.5",
|
| 17 |
"8.0",
|
| 18 |
"8.6",
|
|
|
|
| 25 |
"algorithm": "sha256",
|
| 26 |
"files": {
|
| 27 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 28 |
+
"_mamba_ssm_cuda_2e4b976.abi3.so": "WRbHCk34gbXC2zimdkplc4Yw9LuL0vd+FvfctFOlvnU=",
|
| 29 |
+
"_ops.py": "+JzYZB0OFy2LuJrKfDpyk0JXsS8Iz9Eoy+pClu3+vVI=",
|
| 30 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 31 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 32 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
build/torch212-cxx11-cu130-x86_64-linux/metadata.json.sigstore
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHczCCBvqgAwIBAgIUYzeP6d6SOUzcpqQexOuPqekUZZEwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDY1OTMxWhcNMjYwNjE4MDcwOTMxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+reiHYHFFlD3iJMbTr4Zghc4M8rRY/4DMW5lzemD0hvZhbAabis6vZ5C8LGHAbpARK/T24SFxy3UJtGhhc8yWKOCBhkwggYVMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU1wJqNnhAQcZE5whkSsRATGMZXhEwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYsGCisGAQQB1nkCBAIEfQR7AHkAdwDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZhxzLAAAEAwBIMEYCIQCrHjIt8/Mxqu1rV1v56rIitP1rpnwD2IzDxYewZeonhwIhALyVqUKAuXr2baPxpXwAK+zEfIk14MniJq09IFNkJRX3MAoGCCqGSM49BAMDA2cAMGQCMFocKQyuGjwSJngxoHgS49O47fDe7/1h1Ljo1Ri5B+rH+KtlEL9FBvpLttRXPsj9KgIwFzCRMr6voYljS7QMRn1f5kd0C+Y7iJA0U5T9t0D/sn8DiWdyHPyfsEdluZD0ZMkj"},"tlogEntries":[{"logIndex":"1857846235","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781765971","inclusionPromise":{"signedEntryTimestamp":"MEUCIQCAb9DLOjOu2sWKfQ3fzff6dgPxHvX/OcYXJCc+XnzYnQIgZ8TogKX7xewP346/tOaHtU08ILG9ba4czKTbZWYlzHQ="},"inclusionProof":{"logIndex":"1735941973","rootHash":"fhED2b46W2NTiiuy1kmd4NLgWaATDvTV/40M/hrKFm8=","treeSize":"1735941974","hashes":["OGw9mg/wpdHmK5VauryBl0X+yWO6nPYzDWR9D5rUQu0=","4ItVUrr/DzNptISv0vK5j9TBaCrAVp6yjhHlVEDfaZ8=","mxoYEdujs3QpM9uLs4LL4SXZIRH6plcuSaWgJS2m7wc=","ub8kMqLeAfytAoGqmJGtJAw2nIyrk3CAs16GN2qPXTM=","I0d0D9LPIksW5sRdo73kOhT8Y/fQxDpijIkJ4M+9V1g=","Zj/ZY0eBi0gwVgBaoEOc3DrvBQix71RFSiNXK4sPli4=","Q7TdDu7WbPJBWdHFC09Xg6476ZNxZHnnk9EwtegIzjs=","TIqZLgA6aRph3LTsRCezw52mN9jLpsdRobJF4nyuDsk=","h8qmLE5ZM/33fkJcCpa82SXVNA+SsbijaPv7rG6xbIM=","dBGkiPcr9PeHrVdmtM5A5GHZYWYJVpP1XmzLNrrX7Pk=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735941974\nfhED2b46W2NTiiuy1kmd4NLgWaATDvTV/40M/hrKFm8=\n\n— rekor.sigstore.dev wNI9ajBFAiEA3BpwyCUTiHk4DnycSM6P+SP3yoSdKcNLWnPfRPwK3YsCIBuZgXnENUoM5achZg8BdDzvQ814GYnKkPiy3QZnfB90\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxZDhjODJmNGNlNmE4OTVkNjU5OTYyODg2MDNmNzJiZTg3YzM3MjIwMjMwYmVkMDEzN2FmNDg2MjI2ZDUyNTgzIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJRkgvbFA2K2pERnBJeGFld0tPQ2pZMUZIZWNVclhoUXIrMExPSWVOSk1tbUFpRUFuQ2M2MnowUmtRRG1zcWVQNUN2VERFSkRmQzRycXByUnBCWmJ2R0krTjdRPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5aeFowRjNTVUpCWjBsVldYcGxVRFprTmxOUFZYcGpjSEZSWlhoUGRWQnhaV3RWV2xwRmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJGa3hUMVJOZUZkb1kwNU5hbGwzVG1wRk5FMUVZM2RQVkUxNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVVyY21WcFNGbElSa1pzUkROcFNrMWlWSEkwV21kb1l6Uk5PSEpTV1M4MFJFMVhOV3dLZW1WdFJEQm9kbHBvWWtGaFltbHpOblphTlVNNFRFZElRV0p3UVZKTEwxUXlORk5HZUhrelZVcDBSMmhvWXpoNVYwdFBRMEpvYTNkbloxbFdUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlV4ZDBweENrNXVhRUZSWTFwRk5YZG9hMU56VWtGVVIwMWFXR2hGZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYzBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmxGU04wRklhMEZrZDBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWg0ZWt4QlFVRkZRWGRDU1UxRldVTkpVVU55Q2tocVNYUTRMMDE0Y1hVeGNsWXhkalUyY2tscGRGQXhjbkJ1ZDBReVNYcEVlRmxsZDFwbGIyNW9kMGxvUVV4NVZuRlZTMEYxV0hJeVltRlFlSEJZZDBFS1N5dDZSV1pKYXpFMFRXNXBTbkV3T1VsR1RtdEtVbGd6VFVGdlIwTkRjVWRUVFRRNVFrRk5SRUV5WTBGTlIxRkRUVVp2WTB0UmVYVkhhbmRUU201bmVBcHZTR2RUTkRsUE5EZG1SR1UzTHpGb01VeHFiekZTYVRWQ0szSklLMHQwYkVWTU9VWkNkbkJNZEhSU1dGQnphamxMWjBsM1JucERVazF5Tm5adldXeHFDbE0zVVUxU2JqRm1OV3RrTUVNcldUZHBTa0V3VlRWVU9YUXdSQzl6YmpoRWFWZGtlVWhRZVdaelJXUnNkVnBFTUZwTmEyb0tMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgkhZdTeARGwtdlnvSMqTW/92TfA/Igyzr9s6qGhyUv58CFQD+CbpwOd0VNfXEVCW7m/cBBG/kLBgPMjAyNjA2MTgwNjU5MzFaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHbMIIB1wIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDYxODA2NTkzMVowLwYJKoZIhvcNAQkEMSIEID6QKEbg87/vrGu6071J7r5PRsV0ru/t/ZjbA3WBprcqMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRnMGUCMGKF+2Rj4hQ44gGFKfa6QFKCbABkRPLy8AmQKvgp3ndno+OUjoce7nbwcOlWCF9z6AIxAJ5EK3NBj/6P1oLc9q+vlb4RU3UT23GNAr/qsvPhnWjUt4UFhELyL/02jmJNL8NSJA=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"HYyC9M5qiV1lmWKIYD9yvofDciAjC+0BN69IYibVJYM="},"signature":"MEUCIFH/lP6+jDFpIxaewKOCjY1FHecUrXhQr+0LOIeNJMmmAiEAnCc62z0RkQDmsqeP5CvTDEJDfC4rqprRpBZbvGI+N7Q="}}
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHTDCCBtKgAwIBAgIUbFtbG/r/vU78yfcgHLRu5EYHTbYwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzAzMTMzNDI5WhcNMjYwNzAzMTM0NDI5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKzYVlOmfsTxA8ipKlZ1Hi0rG2g+ta7J2Lkcot37HL8T+riFpG/8w8Y/RTlbi/CgYy7Zy/+bbehT8Q/JWnbAfkKOCBfEwggXtMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU+gjVEZqjnUP38UR3G94Bh99TpPgwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJlNGI5NzYyMWU5Mzc5NzQxMzJmNTQzZGIyNTExMjY4MDZmOTRiYmUwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjg2NTg3NTg5NjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiwYKKwYBBAHWeQIEAgR9BHsAeQB3AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnygwHYQAAAQDAEgwRgIhANdzjHyg5rzgP3BGLbLGwaIa4mlKWRUW2qJ1+HNv6nO/AiEA9JTSTnPTqg2ecaaJIPpF2fMBnIS7RNtR15+l/5kYhIUwCgYIKoZIzj0EAwMDaAAwZQIxAIZmijQks0FEPYBtpK+P4v0GO5UpAvWNXqf2+PUFsiJdhtfi6ddoo7mGxlcBkSAvzAIwHuWjE9Dx9amNh/KVKOBLNbWk24+2zJ95RHzXtj4ysJt5qY5KAUqlqThXW0aW4499"},"tlogEntries":[{"logIndex":"2061243384","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783085670","inclusionPromise":{"signedEntryTimestamp":"MEUCIFBTboct5ykhZIG1Kio4srRFSk8OBCrRtR5kFuHPccqRAiEAjQVitCdR6F1caFXaTQR//dVrZwcI4xz+U4gYeX/Xs1w="},"inclusionProof":{"logIndex":"1939339122","rootHash":"sMDLXHMgu1OhL/4QYLPo8dSOfw4xsIo0EHiFuJx3pJ0=","treeSize":"1939339160","hashes":["x4+7mI07VfH1RuLlHYSeHz/C24N29vQedUFerMqs/2I=","mcNusd3qnAy3vFNeNZYz/lei37dm6wikY+JcAARuBcs=","6C7MoKK4+acaSNBuFQndyh4qIEThD8G8vOvF6cXxHtk=","Gkwv5MNtofQn+NCTHcNRGkQOm+dHmHxMgw4BYd1w5FQ=","1g38wVf//QWQu0lhs096BdFVH2X7EtNEy0JMvVH+BNg=","73al4ifkm61KrdXQywy+BGsBZrvimg08++UQMasf9H0=","A6TRvjbvZfM8jM/NthBgwp21rnPyCN0X00ZlGdZ0XjA=","lLsbYIvBmb4JJTShItnO/STbcGnw2Rz07D9DkBXojEc=","cbVHeB9qFZWeHWa3yMvAxROgW6Lbi5d7S3El/fl54kc=","pjV59X2NA8eDJxwhedFeTKT1bL7P6tUQAq2CvN5JVyU=","vPL+EUF/DLmK2Fbco/6ejKabFfks0ZfcRSbeaS+NZuw=","DzrLfiUQC199WzQ89kUKfq6O8+cY/p7Y5Y+TrQlGzKo=","ue6cwlKg+AeO5/32qCILy2n85VkpmL7JNSD/vSD1PBQ=","5BcprHTbYFhJs9/zmopgvIomJpaJBQ2p5EneNzCzjhA=","BJg3Sjw0cmSlRwTc6wLrDTLBGKIa47J4xQdeTHs89p0=","nyXRyDPEOSJJ9t2F32eShKYeAGz2Z0OK/J6fnsiywOY=","lvtUm97dglxCtkz/pZESafc25No18+C5udmljqWIKjw=","Z1MWr1e8FrDf8zVzz0XKh0zpL1DZePbT3JTZ0UIXhhg=","I+dZvIwhBcmylTZ5mLoVIKIapQHRH789ramiw5T/osA=","RIZjwQJv61lwM5JOP8iNT/RxKPr522/etVqxVBWn7KA=","b69YlhA5qlDwN70us4bq9ysnikE1ulA7EwKBTb+atY0=","LM7F5iwbk8jG29X4FwpkCN6BqDCfuNQTlz5CyQWt87s=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1939339160\nsMDLXHMgu1OhL/4QYLPo8dSOfw4xsIo0EHiFuJx3pJ0=\n\n— rekor.sigstore.dev wNI9ajBGAiEA+16wuifhnlPqb/MqB1cynkY8thi8CCSNn2h2iSCYLPYCIQD591Gm7RTXx34e7dlrR5Bh2HHosxQOKk8WRDpz8uSg4A==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJhNjE5ZWRmYjQyZWU0NjQyMTVlMzIyNzg1OWFmNmU0N2Y0MzVjZDgxNGY4YmU1YWQ3ZGYzYjYxMGQ0NzE4NTYyIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJUUNMYVdTOTBrOXVEdlZtQ0EyR1V5Wk9sdk1jZlNYbUc5Q3pGd0RDZldoaGh3SWdkTWlXaUp1OWF2S2JZMTcveVlsRHRUYXUyRW1yUzRwOXcySTk4Nkp2c2xzPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFVSRU5EUW5STFowRjNTVUpCWjBsVllrWjBZa2N2Y2k5MlZUYzRlV1pqWjBoTVVuVTFSVmxJVkdKWmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVhwTlZFMTZUa1JKTlZkb1kwNU5hbGwzVG5wQmVrMVVUVEJPUkVrMVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZMZWxsV2JFOXRabk5VZUVFNGFYQkxiRm94U0drd2NrY3laeXQwWVRkS01reHJZMjhLZERNM1NFdzRWQ3R5YVVad1J5ODRkemhaTDFKVWJHSnBMME5uV1hrM1dua3ZLMkppWldoVU9GRXZTbGR1WWtGbWEwdFBRMEptUlhkbloxaDBUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlVyWjJwV0NrVmFjV3B1VlZBek9GVlNNMGM1TkVKb09UbFVjRkJuZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVlV3V1dwck0wNXFTWGhhVkd0NlRucHJNMDVFUlhwTmJWa3hDazVFVG10WmFra3hUVlJGZVU1cVozZE9iVmsxVGtkS2FWcFVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEZPUkU1cldXcEpNVTFVUlhrS1RtcG5kMDV0V1RWT1IwcHBXbFJCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEVLVGtST2ExbHFTVEZOVkVWNVRtcG5kMDV0V1RWT1IwcHBXbFJCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiRTVIU1RVS1RucFplVTFYVlRWTmVtTTFUbnBSZUUxNlNtMU9WRkY2V2tkSmVVNVVSWGhOYWxrMFRVUmFiVTlVVW1sWmJWVjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW1jeVRsUm5NMDVVWnpWT2FrRjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwZDFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT1VKSWMwRUtaVkZDTTBGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNTVaM2RJV1ZGQlFVRlJSQXBCUldkM1VtZEphRUZPWkhwcVNIbG5OWEo2WjFBelFrZE1Za3hIZDJGSllUUnRiRXRYVWxWWE1uRktNU3RJVG5ZMmJrOHZRV2xGUVRsS1ZGTlVibEJVQ25Gbk1tVmpZV0ZLU1ZCd1JqSm1UVUp1U1ZNM1VrNTBVakUxSzJ3dk5XdFphRWxWZDBObldVbExiMXBKZW1vd1JVRjNUVVJoUVVGM1dsRkplRUZKV20wS2FXcFJhM013UmtWUVdVSjBjRXNyVURSMk1FZFBOVlZ3UVhaWFRsaHhaaklyVUZWR2MybEtaR2gwWm1rMlpHUnZiemR0UjNoc1kwSnJVMEYyZWtGSmR3cElkVmRxUlRsRWVEbGhiVTVvTDB0V1MwOUNURTVpVjJzeU5Dc3lla281TlZKSWVsaDBhalI1YzBwME5YRlpOVXRCVlhGc2NWUm9XRmN3WVZjME5EazVDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgyGt/jcVWBaX7vOayZc3WZQiltTk0HL7vnziTqJ3zj6wCFB2+CtyHea/+y8eIyGPt9al1sui0GA8yMDI2MDcwMzEzMzQyOVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNzAzMTMzNDI5WjAvBgkqhkiG9w0BCQQxIgQgn5T6ZBUIOVYAi+JtiT3B9IW++I6nLTc1SjreTNVt1YYwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIxAJ0uY5dXikwgjOiqo6f4tcexBTLT1qkd/3MbNELY+ylU8NbwHOf7FKloXNv+53OweAIwE/gMGiZjwGUqDCh8P2hzgaQEEjH43V/mibDJ1RMGZ/cb8sRH0M/JjVolAS/5cMeN"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"phnt+0LuRkIV4yJ4Wa9uR/Q1zYFPi+WtffO2ENRxhWI="},"signature":"MEUCIQCLaWS90k9uDvVmCA2GUyZOlvMcfSXmG9CzFwDCfWhhhwIgdMiWiJu9avKbY17/yYlDtTau2EmrS4p9w2I986Jvsls="}}
|
build/torch212-cxx11-cu132-x86_64-linux/_mamba_ssm_cuda_2e4b976.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:60a8a0bc5b4126cad7765f228a333f2cdc13dc0ec87e2ebc160353d8e9f76945
|
| 3 |
+
size 496466776
|
build/torch212-cxx11-cu132-x86_64-linux/_mamba_ssm_cuda_785446d.abi3.so
DELETED
|
@@ -1,3 +0,0 @@
|
|
| 1 |
-
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:6e9bed730adb7381ff9261d3d6a8e81d50a0f07dae29b1d249eff5e5c8893292
|
| 3 |
-
size 446457592
|
|
|
|
|
|
|
|
|
|
|
|
build/torch212-cxx11-cu132-x86_64-linux/_ops.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import torch
|
| 2 |
-
from . import
|
| 3 |
-
ops = torch.ops.
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
-
return f"
|
|
|
|
| 1 |
import torch
|
| 2 |
+
from . import _mamba_ssm_cuda_2e4b976
|
| 3 |
+
ops = torch.ops._mamba_ssm_cuda_2e4b976
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
+
return f"_mamba_ssm_cuda_2e4b976::{op_name}"
|
build/torch212-cxx11-cu132-x86_64-linux/metadata.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
-
"id": "
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
@@ -11,7 +11,8 @@
|
|
| 11 |
"archs": [
|
| 12 |
"10.0",
|
| 13 |
"11.0",
|
| 14 |
-
"12.0
|
|
|
|
| 15 |
"7.5",
|
| 16 |
"8.0",
|
| 17 |
"8.6",
|
|
@@ -24,8 +25,8 @@
|
|
| 24 |
"algorithm": "sha256",
|
| 25 |
"files": {
|
| 26 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 27 |
-
"
|
| 28 |
-
"_ops.py": "
|
| 29 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 30 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 31 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
|
|
|
| 1 |
{
|
| 2 |
"name": "mamba-ssm",
|
| 3 |
+
"id": "_mamba_ssm_cuda_2e4b976",
|
| 4 |
"version": 1,
|
| 5 |
"license": "Apache-2.0",
|
| 6 |
"python-depends": [
|
|
|
|
| 11 |
"archs": [
|
| 12 |
"10.0",
|
| 13 |
"11.0",
|
| 14 |
+
"12.0",
|
| 15 |
+
"12.1+PTX",
|
| 16 |
"7.5",
|
| 17 |
"8.0",
|
| 18 |
"8.6",
|
|
|
|
| 25 |
"algorithm": "sha256",
|
| 26 |
"files": {
|
| 27 |
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 28 |
+
"_mamba_ssm_cuda_2e4b976.abi3.so": "YKigvFtBJsrXdl8iijM/LNwT3A7Ifi68FgNT2On3aUU=",
|
| 29 |
+
"_ops.py": "+JzYZB0OFy2LuJrKfDpyk0JXsS8Iz9Eoy+pClu3+vVI=",
|
| 30 |
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 31 |
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 32 |
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
build/torch212-cxx11-cu132-x86_64-linux/metadata.json.sigstore
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHczCCBvmgAwIBAgIUMM+5r9cGI0cx/DLURkmEz9B285swCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDY1OTMyWhcNMjYwNjE4MDcwOTMyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqeOweCGfxrYfj5BvZHmLOtQkFVbrnX6mgRgtpV8TtcSUbRQ384CxrC+/L9ayrzrea89A+37kCybc5omBc4MNyaOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUrpr5/t4H0BSzShreblytUfgjXKQwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZhyNNAAAEAwBHMEUCIDlgvbjEa6KKFby0xR8VJCZx/4zWrGFc2o1XWGjO4TgYAiEAq5nBpmsF9MosBrpzZ3J91x5AZcxki/tbAtQ8aCAPdQ4wCgYIKoZIzj0EAwMDaAAwZQIwSYGH/WKehfqUiIG0RDIQY6UJlrTPdvpHnlRq5P4Rdy7m8mSHzB7s3p90H0r2c/8wAjEAiVBI6RD7URxyOMJQ0cDZjNLE7sUIELDOrOFYJkxOkwV183CHUZv8eF7bbpxo/S/n"},"tlogEntries":[{"logIndex":"1857846291","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781765973","inclusionPromise":{"signedEntryTimestamp":"MEUCIBl7olsYDmm7xNhXfnAzGYVhcKkBmv9KEC3RyN5xuHpDAiEAsRSikNEwi9rWbaa4AbztPdjL4zEdhFfILAb7hUDmyuM="},"inclusionProof":{"logIndex":"1735942029","rootHash":"xOGWLQGRWDzWyaTEVQ4fkjmJQzGQZXbNpBoc2kNSoTM=","treeSize":"1735942037","hashes":["zszuzoFCFRMQjz0JrpVXj3oDI5f36Yc6xgCi+Vaq9WE=","9lGsC9aoiITGpYKBHNJTgKVW02ORRnXNIifFxUTSjm0=","0DB4Hi9OPmrVDGC9btQSqw+j8IPHfG4SBOz2NL95vyg=","ngGknwAAIRkpdLG12f3hbfO+miEa9WnA3cvfpDx99Ls=","HW3WivQCdMD7QTmXRNUj0zryBb5wXNWRnwL9Oz4rzDQ=","kIuV5L5CyF6tgW894HY0AGgyNQYe2pzavkFUqk+kHEQ=","I0d0D9LPIksW5sRdo73kOhT8Y/fQxDpijIkJ4M+9V1g=","Zj/ZY0eBi0gwVgBaoEOc3DrvBQix71RFSiNXK4sPli4=","Q7TdDu7WbPJBWdHFC09Xg6476ZNxZHnnk9EwtegIzjs=","TIqZLgA6aRph3LTsRCezw52mN9jLpsdRobJF4nyuDsk=","h8qmLE5ZM/33fkJcCpa82SXVNA+SsbijaPv7rG6xbIM=","dBGkiPcr9PeHrVdmtM5A5GHZYWYJVpP1XmzLNrrX7Pk=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735942037\nxOGWLQGRWDzWyaTEVQ4fkjmJQzGQZXbNpBoc2kNSoTM=\n\n— rekor.sigstore.dev wNI9ajBFAiBA4erRtSMRggWmI/9v51MMzVFLmoKZQ/4VmBisjqkcaQIhAPSkU3pvubKJYsXpq1Xme7V2RxBNxQHvkrlVNZ+boCGW\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJiZjFiNGFjYmFhYjBmMzM1MzI2NzNhYTM0MzlhYTAxYzlkYTY1NGYxNDg3YzYyYmJkYzM3ODQ4ZDM3MzkyMDkwIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJR1RsUzB3cmE5RGZIa1N0cGRqYWRmY25vYkJkMkFWekFDMXdkRFZMdDRleEFpQTU2RlRPK2pjeVp2Z25iS2l1dk54ei8rbTlKUzgyUy9Ya1dZM0JwaXZzU3c9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5adFowRjNTVUpCWjBsVlRVMHJOWEk1WTBkSk1HTjRMMFJNVlZKcmJVVjZPVUl5T0RWemQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJGa3hUMVJOZVZkb1kwNU5hbGwzVG1wRk5FMUVZM2RQVkUxNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZ4WlU5M1pVTkhabmh5V1dacU5VSjJXa2h0VEU5MFVXdEdWbUp5YmxnMmJXZFNaM1FLY0ZZNFZIUmpVMVZpVWxFek9EUkRlSEpES3k5TU9XRjVjbnB5WldFNE9VRXJNemRyUTNsaVl6VnZiVUpqTkUxT2VXRlBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZ5Y0hJMUNpOTBORWd3UWxONlUyaHlaV0pzZVhSVlptZHFXRXRSZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYjBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmtGU05rRklaMEZrWjBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWg1VGs1QlFVRkZRWGRDU0UxRlZVTkpSR3huQ25aaWFrVmhOa3RMUm1KNU1IaFNPRlpLUTFwNEx6UjZWM0pIUm1NeWJ6RllWMGRxVHpSVVoxbEJhVVZCY1RWdVFuQnRjMFk1VFc5elFuSndlbG96U2prS01YZzFRVnBqZUd0cEwzUmlRWFJST0dGRFFWQmtVVFIzUTJkWlNVdHZXa2w2YWpCRlFYZE5SR0ZCUVhkYVVVbDNVMWxIU0M5WFMyVm9abkZWYVVsSE1BcFNSRWxSV1RaVlNteHlWRkJrZG5CSWJteFNjVFZRTkZKa2VUZHRPRzFUU0hwQ04zTXpjRGt3U0RCeU1tTXZPSGRCYWtWQmFWWkNTVFpTUkRkVlVuaDVDazlOU2xFd1kwUmFhazVNUlRkelZVbEZURVJQY2s5R1dVcHJlRTlyZDFZeE9ETkRTRlZhZGpobFJqZGlZbkI0Ynk5VEwyNEtMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgfjrShul28wl/jY2VEkIjCr2XHxdCw4uhpoP3127RmC4CFQCB3iq1L5XMdLFHKtGY8MR1nNTgihgPMjAyNjA2MTgwNjU5MzJaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHbMIIB1wIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDYxODA2NTkzMlowLwYJKoZIhvcNAQkEMSIEIIBMsRiW+c07GTDLNMoGZQ3T7u0gJWMNUD/hJh6/3ojaMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRnMGUCMQCzsPEyXCkMORfI/t/Yf/5ebL2W08wTiXmRzEggLTwyVoUbypLojcUV2RDakQSxo9MCMBhfVKJT+IluIoIAPndAuZhqLEpHd469gxPY5rdSd/mT17xJEb8OMYlfEyn8ZZ0f3g=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"vxtKy6qw8zUyZzqjQ5qgHJ2mVPFIfGK73DeEjTc5IJA="},"signature":"MEQCIGTlS0wra9DfHkStpdjadfcnobBd2AVzAC1wdDVLt4exAiA56FTO+jcyZvgnbKiuvNxz/+m9JS82S/XkWY3BpivsSw=="}}
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHSzCCBtGgAwIBAgIUMDt28NGxgntkuc1xw6sl8uyAlZQwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzAzMTMzNDMxWhcNMjYwNzAzMTM0NDMxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETs7gB7G3TjuSxc+HW3DoCf6ojQpGHKzAVVl/Cm7SM4XYPM21KDSElUKp6zU1/ERa8o8Eup5kJbvG0VGWsOcMn6OCBfAwggXsMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUuMIywtx9btRbZted6d+rhns6xQUwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJlNGI5NzYyMWU5Mzc5NzQxMzJmNTQzZGIyNTExMjY4MDZmOTRiYmUwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjg2NTg3NTg5NjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnygwJUoAAAQDAEcwRQIgHEMk65AndRFkm4tqIVDtCHghWq/7hGEGT/1UBzAkPFECIQDskguQT7Am6f0JWT6oiZ6zKA0yRBcccc+SWUzf8AomGDAKBggqhkjOPQQDAwNoADBlAjEA0LqHqyN6mAJxK8I2MeW8qFxFRaqbhmkaNFmLcmF6nNJIFLPAWZUyF4wJO6OdH4C2AjAbHX/QFEK/gQw3EDRV44sj+tMt+EVCHsP65ceBmZRi8yKeOU7fnR/NgipraI7/YKw="},"tlogEntries":[{"logIndex":"2061243917","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783085672","inclusionPromise":{"signedEntryTimestamp":"MEUCIQCA0wR5utYVe2gB7mJbkTd4ZLIxdeHRQSGg4957wmG9VgIgdE1X+KnRlgImCkODkKXv/tFlzNVRf70yU/5gqXJajZM="},"inclusionProof":{"logIndex":"1939339655","rootHash":"EBRL1b2WkEi2IDmEBclf/525HrJlD5vgAydHuwSXzS4=","treeSize":"1939339701","hashes":["YhE9yLfWQsSaIbO37uwkehas0nqAXwJWEY4Zd2M5qEM=","VwKENxW0FbEOjyLIQE5I1t97bmlXG556XVK8jxMRbt8=","sMR6LxZssaFGC8uTFsEbb9unFUIrD28BF/dnacI62hk=","DzI8ye6c7V/hkytCOkNXReixi/qsPI2y+sbrBiHUg8c=","l6AJoAmxnzoCL6hUxhp2eKv9HV5KjjMKdeXLeseHqMU=","7RGVEkuphKpUMGpYXCpxVJ54mDAZrt5XtF/VU8ck8FA=","S77ums7qi8bqdvGWevv0mIA/EiRPC5lrY9EkJgeSiIU=","hSatCTPqnwEd6QSrf+u2cTNrUowI8vp1S5UDThLxeTQ=","BAEIfqDmH8MeIggO73jMvhFQigpEnGUOQG+zPEwM4V0=","DzrLfiUQC199WzQ89kUKfq6O8+cY/p7Y5Y+TrQlGzKo=","ue6cwlKg+AeO5/32qCILy2n85VkpmL7JNSD/vSD1PBQ=","5BcprHTbYFhJs9/zmopgvIomJpaJBQ2p5EneNzCzjhA=","BJg3Sjw0cmSlRwTc6wLrDTLBGKIa47J4xQdeTHs89p0=","nyXRyDPEOSJJ9t2F32eShKYeAGz2Z0OK/J6fnsiywOY=","lvtUm97dglxCtkz/pZESafc25No18+C5udmljqWIKjw=","Z1MWr1e8FrDf8zVzz0XKh0zpL1DZePbT3JTZ0UIXhhg=","I+dZvIwhBcmylTZ5mLoVIKIapQHRH789ramiw5T/osA=","RIZjwQJv61lwM5JOP8iNT/RxKPr522/etVqxVBWn7KA=","b69YlhA5qlDwN70us4bq9ysnikE1ulA7EwKBTb+atY0=","LM7F5iwbk8jG29X4FwpkCN6BqDCfuNQTlz5CyQWt87s=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1939339701\nEBRL1b2WkEi2IDmEBclf/525HrJlD5vgAydHuwSXzS4=\n\n— rekor.sigstore.dev wNI9ajBEAiBORcqqG9NO0FRuaJlrDz5rOAcbRO8KVX1dW5pt+AMt8QIgI4Y/VKF7EZWIS9WraSzWggTGml86yKDSn35c5XePme8=\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI3MmFiN2QwYWFjMDg5NGEyNzU5YjBkNjQ5NThiZjMxMTdjMGRhMGFhZWU2OWVkOTZkNWVlYTRkYTkyNWFlMDVmIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJRzB5eEl0UzYrb2dpaUloRnBaMG5vTGZ2TkZkOEZZN1hHY0hNN3ZsQmxrSUFpRUEraC81MUhPM3o3Sk5mRkwvc05aNDJkMllVUm1jeXdJSk5LMmczd0ZTdXBJPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFRla05EUW5SSFowRjNTVUpCWjBsVlRVUjBNamhPUjNobmJuUnJkV014ZUhjMmMydzRkWGxCYkZwUmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVhwTlZFMTZUa1JOZUZkb1kwNU5hbGwzVG5wQmVrMVVUVEJPUkUxNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZVY3pkblFqZEhNMVJxZFZONFl5dElWek5FYjBObU5tOXFVWEJIU0V0NlFWWldiQzhLUTIwM1UwMDBXRmxRVFRJeFMwUlRSV3hWUzNBMmVsVXhMMFZTWVRodk9FVjFjRFZyU21KMlJ6QldSMWR6VDJOTmJqWlBRMEptUVhkbloxaHpUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlYxVFVsNUNuZDBlRGxpZEZKaVduUmxaRFprSzNKb2JuTTJlRkZWZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVlV3V1dwck0wNXFTWGhhVkd0NlRucHJNMDVFUlhwTmJWa3hDazVFVG10WmFra3hUVlJGZVU1cVozZE9iVmsxVGtkS2FWcFVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEZPUkU1cldXcEpNVTFVUlhrS1RtcG5kMDV0V1RWT1IwcHBXbFJCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEVLVGtST2ExbHFTVEZOVkVWNVRtcG5kMDV0V1RWT1IwcHBXbFJCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiRTVIU1RVS1RucFplVTFYVlRWTmVtTTFUbnBSZUUxNlNtMU9WRkY2V2tkSmVVNVVSWGhOYWxrMFRVUmFiVTlVVW1sWmJWVjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW1jeVRsUm5NMDVVWnpWT2FrRjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwWjFsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTT0VKSWIwRUtaVUZDTWtGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNTVaM2RLVlc5QlFVRlJSQXBCUldOM1VsRkpaMGhGVFdzMk5VRnVaRkpHYTIwMGRIRkpWa1IwUTBobmFGZHhMemRvUjBWSFZDOHhWVUo2UVd0UVJrVkRTVkZFYzJ0bmRWRlVOMEZ0Q2pabU1FcFhWRFp2YVZvMmVrdEJNSGxTUW1OalkyTXJVMWRWZW1ZNFFXOXRSMFJCUzBKblozRm9hMnBQVUZGUlJFRjNUbTlCUkVKc1FXcEZRVEJNY1VnS2NYbE9ObTFCU25oTE9Fa3lUV1ZYT0hGR2VFWlNZWEZpYUcxcllVNUdiVXhqYlVZMmJrNUtTVVpNVUVGWFdsVjVSalIzU2s4MlQyUklORU15UVdwQllncElXQzlSUmtWTEwyZFJkek5GUkZKV05EUnphaXQwVFhRclJWWkRTSE5RTmpWalpVSnRXbEpwT0hsTFpVOVZOMlp1VWk5T1oybHdjbUZKTnk5WlMzYzlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgs5XDXStTkpUHmqfBxFw8gv/Yhhjn5eTFCnSm7U0JP8gCFBEDORP4FKfs37ybgcx3rtC7yPK+GA8yMDI2MDcwMzEzMzQzMVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNzAzMTMzNDMxWjAvBgkqhkiG9w0BCQQxIgQgEelCGFU2vqPJBRgaQne0K/MeBkBGerWUYE1fSjAsts4wgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIwaAmEKUNnyrObAK9dY6vLInEmius/5hhMTLjrfu63ZoZL0QjdS2g8lp+fF6Er7eveAjEAkGETcOW6qxlBnmr5o0Z1c/hgwf99FSAVu4N3t/SVuPN5qNkSb1+nRcf/IUZoKSUs"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"cqt9CqwIlKJ1mw1klYvzEXwNoKruae2W1e6k2pJa4F8="},"signature":"MEUCIG0yxItS6+ogiiIhFpZ0noLfvNFd8FY7XGcHM7vlBlkIAiEA+h/51HO3z7JNfFL/sNZ42d2YURmcywIJNK2g3wFSupI="}}
|
build/torch213-cxx11-cu126-x86_64-linux/__init__.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
__version__ = "2.2.4"
|
| 2 |
+
|
| 3 |
+
from .ops import selective_state_update, mamba_chunk_scan_combined, mamba_split_conv1d_scan_combined
|
| 4 |
+
from .ops.selective_scan_interface import selective_scan_fn, mamba_inner_fn
|
| 5 |
+
from .modules import Mamba, Mamba2
|
| 6 |
+
from .models import MambaLMHeadModel
|
| 7 |
+
|
| 8 |
+
falcon_mamba_inner_fn = mamba_inner_fn
|
| 9 |
+
__all__ = [
|
| 10 |
+
"selective_scan_fn", "mamba_inner_fn", "falcon_mamba_inner_fn", "selective_state_update", "mamba_chunk_scan_combined", "mamba_split_conv1d_scan_combined",
|
| 11 |
+
"Mamba", "Mamba2", "MambaLMHeadModel",
|
| 12 |
+
]
|
build/torch213-cxx11-cu126-x86_64-linux/_mamba_ssm_cuda_2e4b976.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:896318787d4882d2da0bf871e4bf4c25911d1fb0651b37d4da1d7229f7a419f6
|
| 3 |
+
size 442378416
|
build/torch213-cxx11-cu126-x86_64-linux/_ops.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch
|
| 2 |
+
from . import _mamba_ssm_cuda_2e4b976
|
| 3 |
+
ops = torch.ops._mamba_ssm_cuda_2e4b976
|
| 4 |
+
|
| 5 |
+
def add_op_namespace_prefix(op_name: str):
|
| 6 |
+
"""
|
| 7 |
+
Prefix op by namespace.
|
| 8 |
+
"""
|
| 9 |
+
return f"_mamba_ssm_cuda_2e4b976::{op_name}"
|
build/torch213-cxx11-cu126-x86_64-linux/distributed/__init__.py
ADDED
|
File without changes
|
build/torch213-cxx11-cu126-x86_64-linux/distributed/distributed_utils.py
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Optional
|
| 2 |
+
|
| 3 |
+
import torch
|
| 4 |
+
from torch import Tensor
|
| 5 |
+
from torch.distributed import ProcessGroup
|
| 6 |
+
|
| 7 |
+
# `all_gather_into_tensor` and `reduce_scatter_tensor` are new placeholders for
|
| 8 |
+
# `_all_gather_base` and `_reduce_scatter_base`. They require the most recent
|
| 9 |
+
# version of PyTorch. The following 4 lines are for backward compatibility with
|
| 10 |
+
# older PyTorch.
|
| 11 |
+
if "all_gather_into_tensor" not in dir(torch.distributed):
|
| 12 |
+
torch.distributed.all_gather_into_tensor = torch.distributed._all_gather_base
|
| 13 |
+
if "reduce_scatter_tensor" not in dir(torch.distributed):
|
| 14 |
+
torch.distributed.reduce_scatter_tensor = torch.distributed._reduce_scatter_base
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
# Raw operation, does not support autograd, but does support async
|
| 18 |
+
def all_gather_raw(input_: Tensor, process_group: ProcessGroup, async_op: bool = False):
|
| 19 |
+
world_size = torch.distributed.get_world_size(process_group)
|
| 20 |
+
output = torch.empty(
|
| 21 |
+
world_size * input_.shape[0], *input_.shape[1:], dtype=input_.dtype, device=input_.device
|
| 22 |
+
)
|
| 23 |
+
handle = torch.distributed.all_gather_into_tensor(
|
| 24 |
+
output, input_.contiguous(), group=process_group, async_op=async_op
|
| 25 |
+
)
|
| 26 |
+
return output, handle
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
# Raw operation, does not support autograd, but does support async
|
| 30 |
+
def reduce_scatter_raw(input_: Tensor, process_group: ProcessGroup, async_op: bool = False):
|
| 31 |
+
world_size = torch.distributed.get_world_size(process_group)
|
| 32 |
+
assert input_.shape[0] % world_size == 0
|
| 33 |
+
output = torch.empty(
|
| 34 |
+
input_.shape[0] // world_size, *input_.shape[1:], dtype=input_.dtype, device=input_.device
|
| 35 |
+
)
|
| 36 |
+
handle = torch.distributed.reduce_scatter_tensor(
|
| 37 |
+
output, input_.contiguous(), group=process_group, async_op=async_op
|
| 38 |
+
)
|
| 39 |
+
return output, handle
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
# Raw operation, does not support autograd, but does support async
|
| 43 |
+
def all_reduce_raw(input_: Tensor, process_group: ProcessGroup, async_op: bool = False):
|
| 44 |
+
input_ = input_.contiguous()
|
| 45 |
+
handle = torch.distributed.all_reduce(input_, group=process_group, async_op=async_op)
|
| 46 |
+
return input_, handle
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
class AllGatherFunc(torch.autograd.Function):
|
| 50 |
+
"""Gather the input from sequence parallel region and concatenate."""
|
| 51 |
+
|
| 52 |
+
@staticmethod
|
| 53 |
+
def forward(ctx, input_: Tensor, process_group: ProcessGroup) -> Tensor:
|
| 54 |
+
ctx.process_group = process_group
|
| 55 |
+
output, _ = all_gather_raw(input_, process_group)
|
| 56 |
+
return output
|
| 57 |
+
|
| 58 |
+
@staticmethod
|
| 59 |
+
def backward(ctx, grad_output: Tensor):
|
| 60 |
+
grad_input, _ = reduce_scatter_raw(grad_output, ctx.process_group)
|
| 61 |
+
return grad_input, None
|
| 62 |
+
|
| 63 |
+
|
| 64 |
+
# Supports autograd, but does not support async
|
| 65 |
+
all_gather = AllGatherFunc.apply
|
| 66 |
+
|
| 67 |
+
|
| 68 |
+
class ReduceScatterFunc(torch.autograd.Function):
|
| 69 |
+
"""Reduce scatter the input from the sequence parallel region and concatenate."""
|
| 70 |
+
|
| 71 |
+
@staticmethod
|
| 72 |
+
def forward(ctx, input_: Tensor, process_group: ProcessGroup) -> Tensor:
|
| 73 |
+
ctx.process_group = process_group
|
| 74 |
+
output, _ = reduce_scatter_raw(input_, process_group)
|
| 75 |
+
return output
|
| 76 |
+
|
| 77 |
+
@staticmethod
|
| 78 |
+
def backward(ctx, grad_output: Tensor):
|
| 79 |
+
grad_input, _ = all_gather_raw(grad_output, ctx.process_group)
|
| 80 |
+
return grad_input, None
|
| 81 |
+
|
| 82 |
+
|
| 83 |
+
# Supports autograd, but does not support async
|
| 84 |
+
reduce_scatter = ReduceScatterFunc.apply
|
| 85 |
+
|
| 86 |
+
|
| 87 |
+
class AllReduceFunc(torch.autograd.Function):
|
| 88 |
+
"""Gather the input from sequence parallel region and concatenate."""
|
| 89 |
+
|
| 90 |
+
@staticmethod
|
| 91 |
+
def forward(ctx, input_: Tensor, process_group: ProcessGroup) -> Tensor:
|
| 92 |
+
ctx.process_group = process_group
|
| 93 |
+
output, _ = all_reduce_raw(input_, process_group)
|
| 94 |
+
return output
|
| 95 |
+
|
| 96 |
+
@staticmethod
|
| 97 |
+
def backward(ctx, grad_output: Tensor):
|
| 98 |
+
return grad_output, None
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
# Supports autograd, but does not support async
|
| 102 |
+
all_reduce = AllReduceFunc.apply
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
def sync_shared_params(model: torch.nn.Module, process_group: ProcessGroup):
|
| 106 |
+
# We want to iterate over parameters with _shared_params=True in the same order,
|
| 107 |
+
# as different ranks might have different number of parameters (e.g., only rank 0 has bias).
|
| 108 |
+
pamams_shared = {
|
| 109 |
+
name: p for name, p in model.named_parameters() if getattr(p, "_shared_params", False)
|
| 110 |
+
}
|
| 111 |
+
for _, p in sorted(pamams_shared.items()):
|
| 112 |
+
with torch.no_grad():
|
| 113 |
+
# Broadcast needs src to be global rank, not group rank
|
| 114 |
+
torch.distributed.broadcast(
|
| 115 |
+
p, src=torch.distributed.get_global_rank(process_group, 0), group=process_group
|
| 116 |
+
)
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
# Ref: https://github.com/NVIDIA/Megatron-LM/blob/52e636888cccc41e931251c417a7181fc36de926/megatron/optimizer/optimizer.py#L256
|
| 120 |
+
def allreduce_sequence_parallel_grad(model: torch.nn.Module, process_group: ProcessGroup):
|
| 121 |
+
# We want to iterate over parameters with _sequence_parallel=True in the same order,
|
| 122 |
+
# as different ranks might have different number of parameters (e.g., only rank 0 has bias).
|
| 123 |
+
params_seqparallel = {
|
| 124 |
+
name: p for name, p in model.named_parameters() if getattr(p, "_sequence_parallel", False)
|
| 125 |
+
}
|
| 126 |
+
grads = [p.grad for _, p in sorted(params_seqparallel.items())]
|
| 127 |
+
if grads:
|
| 128 |
+
with torch.no_grad():
|
| 129 |
+
coalesced = torch._utils._flatten_dense_tensors(grads)
|
| 130 |
+
torch.distributed.all_reduce(coalesced, group=process_group)
|
| 131 |
+
for buf, synced in zip(grads, torch._utils._unflatten_dense_tensors(coalesced, grads)):
|
| 132 |
+
buf.copy_(synced)
|
| 133 |
+
|
| 134 |
+
|
| 135 |
+
def get_dim_for_local_rank(dim: int, world_size: int, local_rank: int, multiple_of: int = 1) -> int:
|
| 136 |
+
"""Get the dim for the local rank derived from splitting dim on world_size processes.
|
| 137 |
+
|
| 138 |
+
The split may not be even across the world_size processes.
|
| 139 |
+
"""
|
| 140 |
+
multiple = dim // multiple_of
|
| 141 |
+
div = multiple // world_size
|
| 142 |
+
mod = multiple % world_size
|
| 143 |
+
local_multiple = div + int(local_rank < mod)
|
| 144 |
+
return local_multiple * multiple_of
|
build/torch213-cxx11-cu126-x86_64-linux/distributed/tensor_parallel.py
ADDED
|
@@ -0,0 +1,296 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Tri Dao.
|
| 2 |
+
# The TensorParallel linear modules are inspired by https://github.com/NVIDIA/apex/blob/master/apex/transformer/tensor_parallel/layers.py
|
| 3 |
+
from typing import Optional
|
| 4 |
+
|
| 5 |
+
import torch
|
| 6 |
+
import torch.nn as nn
|
| 7 |
+
import torch.nn.functional as F
|
| 8 |
+
from torch import Tensor
|
| 9 |
+
from torch.distributed import ProcessGroup
|
| 10 |
+
from ..utils.torch import custom_bwd, custom_fwd
|
| 11 |
+
|
| 12 |
+
from einops import rearrange
|
| 13 |
+
|
| 14 |
+
from ..distributed.distributed_utils import (
|
| 15 |
+
all_gather_raw,
|
| 16 |
+
all_reduce,
|
| 17 |
+
all_reduce_raw,
|
| 18 |
+
reduce_scatter,
|
| 19 |
+
reduce_scatter_raw,
|
| 20 |
+
)
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
class ParallelLinearFunc(torch.autograd.Function):
|
| 24 |
+
@staticmethod
|
| 25 |
+
@custom_fwd
|
| 26 |
+
def forward(ctx, x, weight, bias, process_group=None, sequence_parallel=True):
|
| 27 |
+
"""
|
| 28 |
+
If process_group is not None and sequence_parallel=True, we're doing Tensor Parallel
|
| 29 |
+
with sequence parallelism: we do an all_gather_raw of x before doing the matmul.
|
| 30 |
+
"""
|
| 31 |
+
ctx.compute_weight_gradient = weight.requires_grad
|
| 32 |
+
ctx.process_group = process_group
|
| 33 |
+
ctx.sequence_parallel = sequence_parallel
|
| 34 |
+
|
| 35 |
+
if torch.is_autocast_enabled():
|
| 36 |
+
x = x.to(dtype=torch.get_autocast_gpu_dtype())
|
| 37 |
+
x = x.contiguous()
|
| 38 |
+
if process_group is not None and sequence_parallel:
|
| 39 |
+
# We want to kick off the all_gather early, before weight dtype conversion
|
| 40 |
+
total_x, handle_x = all_gather_raw(x, process_group, async_op=True)
|
| 41 |
+
else:
|
| 42 |
+
total_x = x
|
| 43 |
+
|
| 44 |
+
if torch.is_autocast_enabled():
|
| 45 |
+
weight = weight.to(dtype=torch.get_autocast_gpu_dtype())
|
| 46 |
+
bias = bias.to(dtype=torch.get_autocast_gpu_dtype()) if bias is not None else None
|
| 47 |
+
weight = weight.contiguous()
|
| 48 |
+
if process_group is not None and sequence_parallel:
|
| 49 |
+
handle_x.wait()
|
| 50 |
+
batch_shape, n = total_x.shape[:-1], total_x.shape[-1]
|
| 51 |
+
batch_dim = batch_shape.numel()
|
| 52 |
+
# https://github.com/pytorch/pytorch/blob/5b51849b48a7dbccd297286cc0110def4706f9e7/aten/src/ATen/native/cuda/Blas.cpp#L174
|
| 53 |
+
output = F.linear(total_x, weight, bias)
|
| 54 |
+
if ctx.compute_weight_gradient:
|
| 55 |
+
ctx.save_for_backward(x, weight)
|
| 56 |
+
else:
|
| 57 |
+
ctx.save_for_backward(weight)
|
| 58 |
+
return output
|
| 59 |
+
|
| 60 |
+
@staticmethod
|
| 61 |
+
@custom_bwd
|
| 62 |
+
def backward(ctx, grad_output):
|
| 63 |
+
grad_output = grad_output.contiguous()
|
| 64 |
+
process_group = ctx.process_group
|
| 65 |
+
sequence_parallel = ctx.sequence_parallel
|
| 66 |
+
if ctx.compute_weight_gradient:
|
| 67 |
+
x, weight = ctx.saved_tensors
|
| 68 |
+
if process_group is not None and sequence_parallel:
|
| 69 |
+
total_x, handle_x = all_gather_raw(x, process_group, async_op=True)
|
| 70 |
+
else:
|
| 71 |
+
total_x = x
|
| 72 |
+
else:
|
| 73 |
+
(weight,) = ctx.saved_tensors
|
| 74 |
+
total_x = None
|
| 75 |
+
batch_shape = grad_output.shape[:-1]
|
| 76 |
+
batch_dim = batch_shape.numel()
|
| 77 |
+
grad_output = grad_output.reshape(batch_dim, grad_output.shape[-1])
|
| 78 |
+
if ctx.needs_input_grad[0]:
|
| 79 |
+
grad_input = F.linear(grad_output, weight.t())
|
| 80 |
+
grad_input = grad_input.reshape(*batch_shape, grad_input.shape[-1])
|
| 81 |
+
if process_group is not None:
|
| 82 |
+
reduce_fn = reduce_scatter_raw if sequence_parallel else all_reduce_raw
|
| 83 |
+
grad_input, handle_grad_input = reduce_fn(grad_input, process_group, async_op=True)
|
| 84 |
+
else:
|
| 85 |
+
grad_input = None
|
| 86 |
+
if ctx.needs_input_grad[1]:
|
| 87 |
+
assert ctx.compute_weight_gradient
|
| 88 |
+
if process_group is not None and sequence_parallel:
|
| 89 |
+
handle_x.wait()
|
| 90 |
+
grad_weight = torch.einsum(
|
| 91 |
+
"bo,bi->oi", grad_output, total_x.reshape(batch_dim, total_x.shape[-1])
|
| 92 |
+
)
|
| 93 |
+
else:
|
| 94 |
+
grad_weight = None
|
| 95 |
+
grad_bias = grad_output.sum(dim=0) if ctx.needs_input_grad[2] else None
|
| 96 |
+
if process_group is not None and ctx.needs_input_grad[0]:
|
| 97 |
+
handle_grad_input.wait()
|
| 98 |
+
return grad_input, grad_weight, grad_bias, None, None
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
def parallel_linear_func(
|
| 102 |
+
x: Tensor,
|
| 103 |
+
weight: Tensor,
|
| 104 |
+
bias: Optional[Tensor] = None,
|
| 105 |
+
process_group: Optional[ProcessGroup] = None,
|
| 106 |
+
sequence_parallel: bool = True,
|
| 107 |
+
):
|
| 108 |
+
return ParallelLinearFunc.apply(x, weight, bias, process_group, sequence_parallel)
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
class ColumnParallelLinear(nn.Linear):
|
| 112 |
+
def __init__(
|
| 113 |
+
self,
|
| 114 |
+
in_features: int,
|
| 115 |
+
out_features: int,
|
| 116 |
+
process_group: ProcessGroup,
|
| 117 |
+
bias: bool = True,
|
| 118 |
+
sequence_parallel=True,
|
| 119 |
+
multiple_of=1,
|
| 120 |
+
device=None,
|
| 121 |
+
dtype=None,
|
| 122 |
+
) -> None:
|
| 123 |
+
world_size = torch.distributed.get_world_size(process_group)
|
| 124 |
+
if out_features % multiple_of:
|
| 125 |
+
raise ValueError(f"out_features ({out_features}) must be a multiple of {multiple_of}")
|
| 126 |
+
multiple = out_features // multiple_of
|
| 127 |
+
# We want to split @multiple across world_size, but it could be an uneven split
|
| 128 |
+
div = multiple // world_size
|
| 129 |
+
mod = multiple % world_size
|
| 130 |
+
# The first @mod ranks get @div + 1 copies, the rest get @div copies
|
| 131 |
+
local_multiple = div + int(torch.distributed.get_rank(process_group) < mod)
|
| 132 |
+
super().__init__(
|
| 133 |
+
in_features, local_multiple * multiple_of, bias=bias, device=device, dtype=dtype
|
| 134 |
+
)
|
| 135 |
+
self.process_group = process_group
|
| 136 |
+
self.sequence_parallel = sequence_parallel
|
| 137 |
+
|
| 138 |
+
def forward(self, x):
|
| 139 |
+
# If self.sequence_parallel is True, we're doing Tensor Parallel with sequence parallelism:
|
| 140 |
+
# we do an all_gather of x before doing the matmul.
|
| 141 |
+
# If not, then the input is already gathered.
|
| 142 |
+
return parallel_linear_func(
|
| 143 |
+
x,
|
| 144 |
+
self.weight,
|
| 145 |
+
self.bias,
|
| 146 |
+
process_group=self.process_group,
|
| 147 |
+
sequence_parallel=self.sequence_parallel,
|
| 148 |
+
)
|
| 149 |
+
|
| 150 |
+
|
| 151 |
+
class RowParallelLinear(nn.Linear):
|
| 152 |
+
def __init__(
|
| 153 |
+
self,
|
| 154 |
+
in_features: int,
|
| 155 |
+
out_features: int,
|
| 156 |
+
process_group: ProcessGroup,
|
| 157 |
+
bias: bool = True,
|
| 158 |
+
sequence_parallel=True,
|
| 159 |
+
multiple_of=1,
|
| 160 |
+
device=None,
|
| 161 |
+
dtype=None,
|
| 162 |
+
) -> None:
|
| 163 |
+
world_size = torch.distributed.get_world_size(process_group)
|
| 164 |
+
rank = torch.distributed.get_rank(process_group)
|
| 165 |
+
if in_features % multiple_of:
|
| 166 |
+
raise ValueError(f"in_features ({in_features}) must be a multiple of {multiple_of}")
|
| 167 |
+
multiple = in_features // multiple_of
|
| 168 |
+
# We want to split @multiple across world_size, but it could be an uneven split
|
| 169 |
+
div = multiple // world_size
|
| 170 |
+
mod = multiple % world_size
|
| 171 |
+
# The first @mod ranks get @div + 1 copies, the rest get @div copies
|
| 172 |
+
local_multiple = div + int(torch.distributed.get_rank(process_group) < mod)
|
| 173 |
+
# Only rank 0 will have bias
|
| 174 |
+
super().__init__(
|
| 175 |
+
local_multiple * multiple_of,
|
| 176 |
+
out_features,
|
| 177 |
+
bias=bias and rank == 0,
|
| 178 |
+
device=device,
|
| 179 |
+
dtype=dtype,
|
| 180 |
+
)
|
| 181 |
+
self.process_group = process_group
|
| 182 |
+
self.sequence_parallel = sequence_parallel
|
| 183 |
+
|
| 184 |
+
def forward(self, x):
|
| 185 |
+
"""
|
| 186 |
+
We're doing Tensor Parallel with sequence parallelism: we do the matmul and then
|
| 187 |
+
a reduce_scatter of the result.
|
| 188 |
+
"""
|
| 189 |
+
out = parallel_linear_func(x, self.weight, self.bias)
|
| 190 |
+
reduce_fn = reduce_scatter if self.sequence_parallel else all_reduce
|
| 191 |
+
return reduce_fn(out, self.process_group)
|
| 192 |
+
|
| 193 |
+
|
| 194 |
+
class VocabParallelEmbedding(nn.Embedding):
|
| 195 |
+
def __init__(self, num_embeddings, *args, process_group=None, padding_idx=None, **kwargs):
|
| 196 |
+
self.process_group = process_group
|
| 197 |
+
if process_group is not None:
|
| 198 |
+
world_size = torch.distributed.get_world_size(process_group)
|
| 199 |
+
if num_embeddings % world_size != 0:
|
| 200 |
+
raise ValueError(
|
| 201 |
+
f"num_embeddings ({num_embeddings}) must be divisible by "
|
| 202 |
+
f"world_size ({world_size})"
|
| 203 |
+
)
|
| 204 |
+
if world_size > 1 and padding_idx is not None:
|
| 205 |
+
raise RuntimeError("ParallelEmbedding does not support padding_idx")
|
| 206 |
+
else:
|
| 207 |
+
world_size = 1
|
| 208 |
+
super().__init__(num_embeddings // world_size, *args, padding_idx=padding_idx, **kwargs)
|
| 209 |
+
|
| 210 |
+
def forward(self, input: Tensor) -> Tensor:
|
| 211 |
+
if self.process_group is None:
|
| 212 |
+
return super().forward(input)
|
| 213 |
+
else:
|
| 214 |
+
rank = torch.distributed.get_rank(self.process_group)
|
| 215 |
+
vocab_size = self.num_embeddings
|
| 216 |
+
vocab_start_index, vocab_end_index = rank * vocab_size, (rank + 1) * vocab_size
|
| 217 |
+
# Create a mask of valid vocab ids (1 means it needs to be masked).
|
| 218 |
+
input_ids_mask = (input < vocab_start_index) | (input >= vocab_end_index)
|
| 219 |
+
input = input - vocab_start_index
|
| 220 |
+
input[input_ids_mask] = 0
|
| 221 |
+
embeddings = super().forward(input)
|
| 222 |
+
embeddings[input_ids_mask] = 0.0
|
| 223 |
+
return embeddings
|
| 224 |
+
|
| 225 |
+
|
| 226 |
+
class ColumnParallelEmbedding(nn.Embedding):
|
| 227 |
+
def __init__(self, num_embeddings, embedding_dim, *args, process_group=None, **kwargs):
|
| 228 |
+
self.process_group = process_group
|
| 229 |
+
if process_group is not None:
|
| 230 |
+
world_size = torch.distributed.get_world_size(process_group)
|
| 231 |
+
if embedding_dim % world_size != 0:
|
| 232 |
+
raise ValueError(
|
| 233 |
+
f"embedding_dim ({embedding_dim}) must be divisible by "
|
| 234 |
+
f"world_size ({world_size})"
|
| 235 |
+
)
|
| 236 |
+
else:
|
| 237 |
+
world_size = 1
|
| 238 |
+
super().__init__(num_embeddings, embedding_dim // world_size, *args, **kwargs)
|
| 239 |
+
|
| 240 |
+
|
| 241 |
+
class ParallelEmbeddings(nn.Module):
|
| 242 |
+
def __init__(
|
| 243 |
+
self,
|
| 244 |
+
embed_dim,
|
| 245 |
+
vocab_size,
|
| 246 |
+
max_position_embeddings,
|
| 247 |
+
process_group,
|
| 248 |
+
padding_idx=None,
|
| 249 |
+
sequence_parallel=True,
|
| 250 |
+
device=None,
|
| 251 |
+
dtype=None,
|
| 252 |
+
):
|
| 253 |
+
"""
|
| 254 |
+
If max_position_embeddings <= 0, there's no position embeddings
|
| 255 |
+
"""
|
| 256 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 257 |
+
super().__init__()
|
| 258 |
+
self.process_group = process_group
|
| 259 |
+
self.sequence_parallel = sequence_parallel
|
| 260 |
+
self.word_embeddings = VocabParallelEmbedding(
|
| 261 |
+
vocab_size,
|
| 262 |
+
embed_dim,
|
| 263 |
+
padding_idx=padding_idx,
|
| 264 |
+
process_group=process_group,
|
| 265 |
+
**factory_kwargs,
|
| 266 |
+
)
|
| 267 |
+
self.max_position_embeddings = max_position_embeddings
|
| 268 |
+
if self.max_position_embeddings > 0:
|
| 269 |
+
self.position_embeddings = ColumnParallelEmbedding(
|
| 270 |
+
max_position_embeddings, embed_dim, process_group=process_group, **factory_kwargs
|
| 271 |
+
)
|
| 272 |
+
|
| 273 |
+
def forward(self, input_ids, position_ids=None, combine_batch_seqlen_dim=False):
|
| 274 |
+
"""
|
| 275 |
+
input_ids: (batch, seqlen)
|
| 276 |
+
position_ids: (batch, seqlen)
|
| 277 |
+
"""
|
| 278 |
+
batch_size, seqlen = input_ids.shape
|
| 279 |
+
world_size = torch.distributed.get_world_size(self.process_group)
|
| 280 |
+
embeddings = self.word_embeddings(input_ids)
|
| 281 |
+
if self.max_position_embeddings > 0:
|
| 282 |
+
if position_ids is None:
|
| 283 |
+
position_ids = torch.arange(seqlen, dtype=torch.long, device=input_ids.device)
|
| 284 |
+
position_embeddings = self.position_embeddings(position_ids)
|
| 285 |
+
if world_size <= 1:
|
| 286 |
+
embeddings = embeddings + position_embeddings
|
| 287 |
+
else:
|
| 288 |
+
partition_dim = self.position_embeddings.embedding_dim
|
| 289 |
+
rank = torch.distributed.get_rank(self.process_group)
|
| 290 |
+
embeddings[
|
| 291 |
+
..., rank * partition_dim : (rank + 1) * partition_dim
|
| 292 |
+
] += position_embeddings
|
| 293 |
+
if combine_batch_seqlen_dim:
|
| 294 |
+
embeddings = rearrange(embeddings, "b s d -> (b s) d")
|
| 295 |
+
reduce_fn = reduce_scatter if self.sequence_parallel else all_reduce
|
| 296 |
+
return embeddings if world_size <= 1 else reduce_fn(embeddings, self.process_group)
|
build/torch213-cxx11-cu126-x86_64-linux/mamba_ssm/__init__.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import ctypes
|
| 2 |
+
import importlib.util
|
| 3 |
+
import sys
|
| 4 |
+
from pathlib import Path
|
| 5 |
+
from types import ModuleType
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def _import_from_path(file_path: Path) -> ModuleType:
|
| 9 |
+
# We cannot use the module name as-is, after adding it to `sys.modules`,
|
| 10 |
+
# it would also be used for other imports. So, we make a module name that
|
| 11 |
+
# depends on the path for it to be unique using the hex-encoded hash of
|
| 12 |
+
# the path.
|
| 13 |
+
path_hash = "{:x}".format(ctypes.c_size_t(hash(file_path.absolute())).value)
|
| 14 |
+
module_name = path_hash
|
| 15 |
+
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
| 16 |
+
if spec is None:
|
| 17 |
+
raise ImportError(f"Cannot load spec for {module_name} from {file_path}")
|
| 18 |
+
module = importlib.util.module_from_spec(spec)
|
| 19 |
+
if module is None:
|
| 20 |
+
raise ImportError(f"Cannot load module {module_name} from spec")
|
| 21 |
+
sys.modules[module_name] = module
|
| 22 |
+
spec.loader.exec_module(module) # type: ignore
|
| 23 |
+
return module
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
globals().update(vars(_import_from_path(Path(__file__).parent.parent / "__init__.py")))
|
build/torch213-cxx11-cu126-x86_64-linux/metadata.json
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "mamba-ssm",
|
| 3 |
+
"id": "_mamba_ssm_cuda_2e4b976",
|
| 4 |
+
"version": 1,
|
| 5 |
+
"license": "Apache-2.0",
|
| 6 |
+
"python-depends": [
|
| 7 |
+
"einops"
|
| 8 |
+
],
|
| 9 |
+
"backend": {
|
| 10 |
+
"type": "cuda",
|
| 11 |
+
"archs": [
|
| 12 |
+
"7.0",
|
| 13 |
+
"7.2",
|
| 14 |
+
"7.5",
|
| 15 |
+
"8.0",
|
| 16 |
+
"8.6",
|
| 17 |
+
"8.7",
|
| 18 |
+
"8.9",
|
| 19 |
+
"9.0+PTX"
|
| 20 |
+
]
|
| 21 |
+
},
|
| 22 |
+
"digest": {
|
| 23 |
+
"algorithm": "sha256",
|
| 24 |
+
"files": {
|
| 25 |
+
"__init__.py": "Z1jVawRP+RMSqPQG5GBCeRDHc99MRelfyPQzzhlvcYw=",
|
| 26 |
+
"_mamba_ssm_cuda_2e4b976.abi3.so": "iWMYeH1IgtLaC/hx5L9MJZEdH7BlGzfU2h1yKfekGfY=",
|
| 27 |
+
"_ops.py": "+JzYZB0OFy2LuJrKfDpyk0JXsS8Iz9Eoy+pClu3+vVI=",
|
| 28 |
+
"distributed/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 29 |
+
"distributed/distributed_utils.py": "qhcybRXtslssuV9LYaQy37haPaPtklM4YUMDx9UvnnQ=",
|
| 30 |
+
"distributed/tensor_parallel.py": "LD/G2t2u5uDHyG/aTr+K/Fow2BTfc6CqXNUWxyQNIOg=",
|
| 31 |
+
"mamba_ssm/__init__.py": "DFYPlrhXwYjEqCl/8n0SmWGZV8NFml5DPhMjKfv98GY=",
|
| 32 |
+
"models/__init__.py": "mGa9i0oDQaBiEv4FbpIfrvEyWhK75wFNP5g0ob0pw1U=",
|
| 33 |
+
"models/config_mamba.py": "KnLBaG93W1ZUfjnKRAa6EBSNEv16eRxXziuoUSYBD80=",
|
| 34 |
+
"models/mixer_seq_simple.py": "SegRdVaBQKml6uoMoKE5UFWRHta0IiJ2fp4Tw1JqHIo=",
|
| 35 |
+
"modules/__init__.py": "Q6q0wng3smVLvW2pxCAQPReaKkydvGCNHFjs4Lu3LB4=",
|
| 36 |
+
"modules/block.py": "fH/KDDXmUo6oKx6K+NVmCcsuW4nEm9ahBLtvDo3S1gY=",
|
| 37 |
+
"modules/mamba2.py": "Lj2qX6BCpj4lrnI6UaWcemet6S0Iesmo/UjZ47NYYXg=",
|
| 38 |
+
"modules/mamba2_simple.py": "2W0krgqwr+Q/rDK/+sb+nC+wT793rZ7ozOMxZiehwBA=",
|
| 39 |
+
"modules/mamba_simple.py": "UcY/lpM+nAit3X2QYwSTp11yWxHaMXUmVQgcDL04qrs=",
|
| 40 |
+
"modules/mha.py": "QkTau2hxdCxTuSX84KWgYa1wcuRkMCZLcLwiWXcBS7g=",
|
| 41 |
+
"modules/mlp.py": "06o2CuZ2CNJYKXXyXsmtxXYT5ELy7e/NiOkTY+beUCE=",
|
| 42 |
+
"modules/ssd_minimal.py": "2qLlzjJemIQmrSn4opZQxEES01l2X5Hm5DAGfwAmyDg=",
|
| 43 |
+
"ops/__init__.py": "t5DB51GI8HuvZP+P8rSHCamL7Yf+AYsGf28FZ8MKKrA=",
|
| 44 |
+
"ops/selective_scan_interface.py": "8lhVZdB0fDirnB5TukYDM7urNIMp+4NlcqlzdexLVKM=",
|
| 45 |
+
"ops/triton/__init__.py": "EqZ8Nb7HWyhDVHYI34P87X1nTe5cmGtFGcpuwRwFEdY=",
|
| 46 |
+
"ops/triton/k_activations.py": "hVcl6DLerDT7XxZG0lL7stA44tj60UEg+JCSkxsmFH4=",
|
| 47 |
+
"ops/triton/layer_norm.py": "McoZpXkK4ta5rM9phlBH7VXrkIcoNjBSgb2PVuHYCvU=",
|
| 48 |
+
"ops/triton/layernorm_gated.py": "62JS4ke5DxyKdZRu+8GiIeDE2nAbZ1fdrknzSVz3pC8=",
|
| 49 |
+
"ops/triton/selective_state_update.py": "7xTBcJigSRZ+zqRRPtPUaZNDNMYEaWwos3LTw51tBog=",
|
| 50 |
+
"ops/triton/softplus.py": "rdz5bzBt0sm/HJ75/tpCOBpuVa2QbdkuIgWY/P7HtQg=",
|
| 51 |
+
"ops/triton/ssd_bmm.py": "LbPFXdUKyL6JRcWuOig+bRI06yOcqk2W0d/z+8qGo2c=",
|
| 52 |
+
"ops/triton/ssd_chunk_scan.py": "mmN52UEBuKlrsuyX4qGQUfVxmW4KsREa1lWL5lbbQIY=",
|
| 53 |
+
"ops/triton/ssd_chunk_state.py": "3by8diflkY4EpDcMuCoShrUlsA6wLrafD8+b/PGC/VA=",
|
| 54 |
+
"ops/triton/ssd_combined.py": "1ashwPfWuA5xcogid0YMTN48nSImgV8YosKlMqQoDEw=",
|
| 55 |
+
"ops/triton/ssd_state_passing.py": "YV3IxaeB2ysPo0qh+4SMx8Q1W77tMvw57DNhSQ4R6XU=",
|
| 56 |
+
"utils/__init__.py": "47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=",
|
| 57 |
+
"utils/generation.py": "21adNBvbzCLLvwW6lPmzhRofmxE68NR75fOWDl22ZkQ=",
|
| 58 |
+
"utils/hf.py": "qm86NJgmYSvzsxDSCevlBUa/GyvpvO49WVnKv6fSNfY=",
|
| 59 |
+
"utils/torch.py": "HDEyoadH6RSHToS18wDqgNApf6um65JWy1rEs9ZBPAY="
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
}
|
build/torch213-cxx11-cu126-x86_64-linux/metadata.json.sigstore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHSjCCBtCgAwIBAgIUNjqcVqrCNDYaikeY5GAw4/zV34swCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNzAzMTMzNDEyWhcNMjYwNzAzMTM0NDEyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEjB0CFF7BjiIdPkb+KpWfqo2lmviEQXVGfe86+tcHv0g/AkS3N0/wVsf8SBOw0hm4c2R4D08mGxNIcX/jnbyNlKOCBe8wggXrMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUWHNx4N83urSytR5swgDe1qRQjPgwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wawYDVR0RAQH/BGEwX4ZdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTATBgorBgEEAYO/MAEEBAVCdWlsZDArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMG0GCisGAQQBg78wAQkEXwxdaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoMmU0Yjk3NjIxZTkzNzk3NDEzMmY1NDNkYjI1MTEyNjgwNmY5NGJiZTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBtBgorBgEEAYO/MAESBF8MXWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKDJlNGI5NzYyMWU5Mzc5NzQxMzJmNTQzZGIyNTExMjY4MDZmOTRiYmUwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMjg2NTg3NTg5NjAvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABnygv2M4AAAQDAEYwRAIgKvGzIUCod/LhkT3fGLrTv1lZmpJezi26xXdpkC+X+OMCIH4103u0bZY2mOOTm2DLanSzhq3F7LYQXzbxOcB0dD12MAoGCCqGSM49BAMDA2gAMGUCMQDWgyoxn5W3WgILH6jfBGZVC5YOkbPCOnNa5r4ek5+4FNukKJsiYrf+drRbbNv9SwgCMAEbKnYox1Jq6mDcB6DjoaItsuQb+n/nusUADCHZdpZ0SwRdsaRVkEE99bthiJRTug=="},"tlogEntries":[{"logIndex":"2061239456","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1783085652","inclusionPromise":{"signedEntryTimestamp":"MEUCIAulub+37eRmvtu5p8/9AjscYtOv8z9DDx2S3Ct9dJvIAiEA296q2GaYR2KGT47DYdKeZkuubAAY0UtKrqZobbCGmmE="},"inclusionProof":{"logIndex":"1939335194","rootHash":"nW9WxvYfkJWZzKaPO7Up7lulGyorsszjYX9jGzrnAsg=","treeSize":"1939335463","hashes":["yAtkeFamdi6p0pEuPa9afSDkvg/7fv4RLTxPr7uKFWg=","lvIAsLBbyfbYw+6Pjs3rLl+4nfI7wA2pmG+CESFVgoo=","ijdkektuHB88nP5BhUwB7qHc9av6AU+/yykO+kQea2A=","uGWtzsEkB1C+wjp1tMG4hF2W83RLxrOgKLMJzuPA9S0=","wSeUWAn89U6OWeuZWb1wQJ+PIn71Eo5GUtRyRthhzXU=","o86vvXRH/IZI9QcKC/xGwV8+v+TRDKs7e7HQP6Q00Mg=","59iuhLvQPZPZwUqTGDfnie5hA7/BStdrMWwNuaLpo2Y=","3nXhfi5zT9J2PHiqy/W8Y8rVC1E2cu6PSvTisAFfRdA=","W6NE7ghJAQd6CR8dmdCxW9D288qbUVyzrr3rjQ5ac+o=","dkxSFJ76QYfcYZd0FZ1ztNIYtDj8WF+edLXK0EwhgP0=","ue6cwlKg+AeO5/32qCILy2n85VkpmL7JNSD/vSD1PBQ=","5BcprHTbYFhJs9/zmopgvIomJpaJBQ2p5EneNzCzjhA=","BJg3Sjw0cmSlRwTc6wLrDTLBGKIa47J4xQdeTHs89p0=","nyXRyDPEOSJJ9t2F32eShKYeAGz2Z0OK/J6fnsiywOY=","lvtUm97dglxCtkz/pZESafc25No18+C5udmljqWIKjw=","Z1MWr1e8FrDf8zVzz0XKh0zpL1DZePbT3JTZ0UIXhhg=","I+dZvIwhBcmylTZ5mLoVIKIapQHRH789ramiw5T/osA=","RIZjwQJv61lwM5JOP8iNT/RxKPr522/etVqxVBWn7KA=","b69YlhA5qlDwN70us4bq9ysnikE1ulA7EwKBTb+atY0=","LM7F5iwbk8jG29X4FwpkCN6BqDCfuNQTlz5CyQWt87s=","+/VZ56MsIPxMiyLAodzKXo5TEWdQp36z89qLhpzloAo=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1939335463\nnW9WxvYfkJWZzKaPO7Up7lulGyorsszjYX9jGzrnAsg=\n\n— rekor.sigstore.dev wNI9ajBFAiEA5RnZpStPz+KSTaSWBxRy5fCeSZa2IQXK88hLVU3Qny8CIAoeE9oprRa6zesV1IlsXx138taaq2POBoNVzrx+z2WU\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJhOThmYWZkZDkxOTZhM2NkY2FlMWY5MDNiMWU5OTk5YTRlYTI2ZTEyYjU3NTI4ODcyYTAyYThhZjk1OGM4MmFjIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUNFanJkTXBsNmtkTkpDaS80dy9FUUpmb1FibXh1S21nU0ZTVGR0ZTRGN0lnSWhBS3IwRFRMbDhGVDhtQWlTb013NGl1S2VqYmFpWWc3K1N6amo3SlVDM0NuRiIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFRha05EUW5SRFowRjNTVUpCWjBsVlRtcHhZMVp4Y2tOT1JGbGhhV3RsV1RWSFFYYzBMM3BXTXpSemQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDU2UVhwTlZFMTZUa1JGZVZkb1kwNU5hbGwzVG5wQmVrMVVUVEJPUkVWNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZxUWpCRFJrWTNRbXBwU1dSUWEySXJTM0JYWm5Gdk1teHRkbWxGVVZoV1IyWmxPRFlLSzNSalNIWXdaeTlCYTFNelRqQXZkMVp6WmpoVFFrOTNNR2h0TkdNeVVqUkVNRGh0UjNoT1NXTllMMnB1WW5sT2JFdFBRMEpsT0hkbloxaHlUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZYU0U1NENqUk9PRE4xY2xONWRGSTFjM2RuUkdVeGNWSlJhbEJuZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJGM1dVUldVakJTUVZGSUwwSkhSWGRZTkZwa1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4dWJHaGlWM2hCQ21OdFZtMWplVGx2V2xkR2EyTjVPWFJaVjJ4MVRVUnJSME5wYzBkQlVWRkNaemM0ZDBGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpBS1lWYzVkV041Tlc1aFdGSnZaRmRLTVdNeVZubFpNamwxWkVkV2RXUkROV3BpTWpCM1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWN3cGlNMlJtV2tkc2VtTkhSakJaTW1kM1RtZFpTMHQzV1VKQ1FVZEVkbnBCUWtGM1VXOU5iVlV3V1dwck0wNXFTWGhhVkd0NlRucHJNMDVFUlhwTmJWa3hDazVFVG10WmFra3hUVlJGZVU1cVozZE9iVmsxVGtkS2FWcFVRVlJDWjI5eVFtZEZSVUZaVHk5TlFVVkZRa0ZXUTJSWGJITmFSRUZ5UW1kdmNrSm5SVVVLUVZsUEwwMUJSVVpDUWpGdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2VEZkT2RtSlhNVEZpYld3d1pWUkJaRUpuYjNKQ1owVkZRVmxQTHdwTlFVVkhRa0U1ZVZwWFducE1NbWhzV1ZkU2Vrd3lNV2hoVnpSM1QzZFpTMHQzV1VKQ1FVZEVkbnBCUWtOQlVYUkVRM1J2WkVoU2QyTjZiM1pNTTFKMkNtRXlWblZNYlVacVpFZHNkbUp1VFhWYU1td3dZVWhXYVdSWVRteGpiVTUyWW01U2JHSnVVWFZaTWpsMFRVY3dSME5wYzBkQlVWRkNaemM0ZDBGUmEwVUtXSGQ0WkdGSVVqQmpTRTAyVEhrNWJtRllVbTlrVjBsMVdUSTVkRXd5YURGYU1tUndZbTFrYlZsWFRteE1NblJzWTIwMWJHSklUWFJaTWpsMFlsaFdkUXBoV0ZJMVRIazFibUZZVW05a1YwbDJaREk1ZVdFeVduTmlNMlI2VERKS01XRlhlR3RNYm14b1lsZDRRV050Vm0xamVUbHZXbGRHYTJONU9YUlpWMngxQ2sxRVowZERhWE5IUVZGUlFtYzNPSGRCVVc5RlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEZPUkU1cldXcEpNVTFVUlhrS1RtcG5kMDV0V1RWT1IwcHBXbFJCWWtKbmIzSkNaMFZGUVZsUEwwMUJSVXhDUVRCTlF6Tk9iR0pIV1hSaFJ6bDZaRWRXYTAxRlFVZERhWE5IUVZGUlFncG5OemgzUVZGM1JVMW5kM2RoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiR050Tld4aVNFMTBDbGt5T1hSaVdGWjFZVmhTTlUxRVowZERhWE5IUVZGUlFtYzNPSGRCVVRCRlMyZDNiMDF0VlRCWmFtc3pUbXBKZUZwVWEzcE9lbXN6VGtSRmVrMXRXVEVLVGtST2ExbHFTVEZOVkVWNVRtcG5kMDV0V1RWT1IwcHBXbFJCWmtKbmIzSkNaMFZGUVZsUEwwMUJSVTlDUWtWTlJETktiRnB1VFhaaFIxWm9Xa2hOZGdwaVYwWndZbXBCWVVKbmIzSkNaMFZGUVZsUEwwMUJSVkJDUVhkTlEycEZkMDU2UlRCT2VsVXhUV3ByZDB4bldVdExkMWxDUWtGSFJIWjZRVUpGUVZGbkNrUkNOVzlrU0ZKM1kzcHZka3d5WkhCa1IyZ3hXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWM1IwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWUlVVc0tSRUZuZVU1VVkzbE5SR013VFhwQ2RFSm5iM0pDWjBWRlFWbFBMMDFCUlZOQ1JqaE5XRmRvTUdSSVFucFBhVGgyV2pKc01HRklWbWxNYlU1MllsTTVid3BrVjJSdVlWYzFibHB0Um1wYVV6bHlXbGhLZFZwWGVIcE1WMDUyWWxjeE1XSnRiREJsVXpoMVdqSnNNR0ZJVm1sTU0yUjJZMjEwYldKSE9UTmplVGxwQ21SWGJITmFRelUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTkVKbmIzSkNaMFZGUVZsUEwwMUJSVlJDUTI5TlMwUktiRTVIU1RVS1RucFplVTFYVlRWTmVtTTFUbnBSZUUxNlNtMU9WRkY2V2tkSmVVNVVSWGhOYWxrMFRVUmFiVTlVVW1sWmJWVjNTVkZaUzB0M1dVSkNRVWRFZG5wQlFncEdRVkZVUkVKR00ySXpTbkphYlhoMlpERTVhMkZZVG5kWldGSnFZVVJDYTBKbmIzSkNaMFZGUVZsUEwwMUJSVlpDUmxsTlZrZG9NR1JJUW5wUGFUaDJDbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemxvV1ROU2NHSXlOWG9LVEROS01XSnVUWFpOYW1jeVRsUm5NMDVVWnpWT2FrRjJXVmhTTUZwWE1YZGtTRTEyVFZSQlYwSm5iM0pDWjBWRlFWbFBMMDFCUlZkQ1FXZE5RbTVDTVFwWmJYaHdXWHBDUjBKbmIzSkNaMFZGUVZsUEwwMUJSVmxDUkdkTlRtNUtiR05IT0RaaFNGWnVXakpzZFZveVdtaFpNbFYyWVRKV2VXSnRWbk5qZVRGcUNtSXlNWFJrVnpWd1pFaHJObU50Vm0xUGJrcHNXbTVOZG1GSFZtaGFTRTEyWWxkR2NHSnFRMEpwVVZsTFMzZFpRa0pCU0ZkbFVVbEZRV2RTTjBKSWEwRUtaSGRDTVVGT01EbE5SM0pIZUhoRmVWbDRhMlZJU214dVRuZExhVk5zTmpRemFubDBMelJsUzJOdlFYWkxaVFpQUVVGQlFtNTVaM1l5VFRSQlFVRlJSQXBCUlZsM1VrRkpaMHQyUjNwSlZVTnZaQzlNYUd0VU0yWkhUSEpVZGpGc1dtMXdTbVY2YVRJMmVGaGtjR3RESzFnclQwMURTVWcwTVRBemRUQmlXbGt5Q20xUFQxUnRNa1JNWVc1VGVtaHhNMFkzVEZsUldIcGllRTlqUWpCa1JERXlUVUZ2UjBORGNVZFRUVFE1UWtGTlJFRXlaMEZOUjFWRFRWRkVWMmQ1YjNnS2JqVlhNMWRuU1V4SU5tcG1Ra2RhVmtNMVdVOXJZbEJEVDI1T1lUVnlOR1ZyTlNzMFJrNTFhMHRLYzJsWmNtWXJaSEpTWW1KT2RqbFRkMmREVFVGRllncExibGx2ZURGS2NUWnRSR05DTmtScWIyRkpkSE4xVVdJcmJpOXVkWE5WUVVSRFNGcGtjRm93VTNkU1pITmhVbFpyUlVVNU9XSjBhR2xLVWxSMVp6MDlDaTB0TFMwdFJVNUVJRU5GVWxSSlJrbERRVlJGTFMwdExTMEsifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgQVmtTxbIT/yjkpdBUdjfgHn4abIJyMxxLjxOTOcDiRoCFQD/ql0ysX7q6cRBFsOhwZt6v739kBgPMjAyNjA3MDMxMzM0MTJaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHaMIIB1gIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDcwMzEzMzQxMlowLwYJKoZIhvcNAQkEMSIEIA9/aMZZoXGfrMJ42/ThC/x/PrQszmqmmeWtv83rV0AGMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRmMGQCMF0TU7NrAB+1RxhPnp5SE5SRXbRVF8UfAyxNw+nihNL0739rZKvcIxLUkhbWommrNQIwLTNFJVNbBb4wzx7VBbEk41gd+mVkXCFgVGhE5F7+/ydQCbsyj48NJb7hQtb+rWoW"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"qY+v3ZGWo83K4fkDsemZmk6ibhK1dSiHKgKor5WMgqw="},"signature":"MEYCIQCEjrdMpl6kdNJCi/4w/EQJfoQbmxuKmgSFSTdte4F7IgIhAKr0DTLl8FT8mAiSoMw4iuKejbaiYg7+Szjj7JUC3CnF"}}
|
build/torch213-cxx11-cu126-x86_64-linux/models/__init__.py
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .mixer_seq_simple import MambaLMHeadModel
|
| 2 |
+
|
| 3 |
+
__all__ = [
|
| 4 |
+
"MambaLMHeadModel",
|
| 5 |
+
]
|
build/torch213-cxx11-cu126-x86_64-linux/models/config_mamba.py
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from dataclasses import dataclass, field
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
@dataclass
|
| 5 |
+
class MambaConfig:
|
| 6 |
+
|
| 7 |
+
d_model: int = 2560
|
| 8 |
+
d_intermediate: int = 0
|
| 9 |
+
n_layer: int = 64
|
| 10 |
+
vocab_size: int = 50277
|
| 11 |
+
ssm_cfg: dict = field(default_factory=dict)
|
| 12 |
+
attn_layer_idx: list = field(default_factory=list)
|
| 13 |
+
attn_cfg: dict = field(default_factory=dict)
|
| 14 |
+
rms_norm: bool = True
|
| 15 |
+
residual_in_fp32: bool = True
|
| 16 |
+
fused_add_norm: bool = True
|
| 17 |
+
pad_vocab_size_multiple: int = 8
|
| 18 |
+
tie_embeddings: bool = True
|
build/torch213-cxx11-cu126-x86_64-linux/models/mixer_seq_simple.py
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2023, Albert Gu, Tri Dao.
|
| 2 |
+
|
| 3 |
+
import math
|
| 4 |
+
from functools import partial
|
| 5 |
+
import json
|
| 6 |
+
import os
|
| 7 |
+
import copy
|
| 8 |
+
|
| 9 |
+
from collections import namedtuple
|
| 10 |
+
|
| 11 |
+
import torch
|
| 12 |
+
import torch.nn as nn
|
| 13 |
+
|
| 14 |
+
from .config_mamba import MambaConfig
|
| 15 |
+
from ..modules.mamba_simple import Mamba
|
| 16 |
+
from ..modules.mamba2 import Mamba2
|
| 17 |
+
from ..modules.mha import MHA
|
| 18 |
+
from ..modules.mlp import GatedMLP
|
| 19 |
+
from ..modules.block import Block
|
| 20 |
+
from ..utils.generation import GenerationMixin
|
| 21 |
+
from ..utils.hf import load_config_hf, load_state_dict_hf
|
| 22 |
+
|
| 23 |
+
try:
|
| 24 |
+
from ..ops.triton.layer_norm import RMSNorm, layer_norm_fn, rms_norm_fn
|
| 25 |
+
except ImportError:
|
| 26 |
+
RMSNorm, layer_norm_fn, rms_norm_fn = None, None, None
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def create_block(
|
| 30 |
+
d_model,
|
| 31 |
+
d_intermediate,
|
| 32 |
+
ssm_cfg=None,
|
| 33 |
+
attn_layer_idx=None,
|
| 34 |
+
attn_cfg=None,
|
| 35 |
+
norm_epsilon=1e-5,
|
| 36 |
+
rms_norm=False,
|
| 37 |
+
residual_in_fp32=False,
|
| 38 |
+
fused_add_norm=False,
|
| 39 |
+
layer_idx=None,
|
| 40 |
+
device=None,
|
| 41 |
+
dtype=None,
|
| 42 |
+
):
|
| 43 |
+
if ssm_cfg is None:
|
| 44 |
+
ssm_cfg = {}
|
| 45 |
+
if attn_layer_idx is None:
|
| 46 |
+
attn_layer_idx = []
|
| 47 |
+
if attn_cfg is None:
|
| 48 |
+
attn_cfg = {}
|
| 49 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 50 |
+
if layer_idx not in attn_layer_idx:
|
| 51 |
+
# Create a copy of the config to modify
|
| 52 |
+
ssm_cfg = copy.deepcopy(ssm_cfg) if ssm_cfg is not None else {}
|
| 53 |
+
ssm_layer = ssm_cfg.pop("layer", "Mamba1")
|
| 54 |
+
if ssm_layer not in ["Mamba1", "Mamba2"]:
|
| 55 |
+
raise ValueError(f"Invalid ssm_layer: {ssm_layer}, only support Mamba1 and Mamba2")
|
| 56 |
+
mixer_cls = partial(
|
| 57 |
+
Mamba2 if ssm_layer == "Mamba2" else Mamba,
|
| 58 |
+
layer_idx=layer_idx,
|
| 59 |
+
**ssm_cfg,
|
| 60 |
+
**factory_kwargs
|
| 61 |
+
)
|
| 62 |
+
else:
|
| 63 |
+
mixer_cls = partial(MHA, layer_idx=layer_idx, **attn_cfg, **factory_kwargs)
|
| 64 |
+
norm_cls = partial(
|
| 65 |
+
nn.LayerNorm if not rms_norm else RMSNorm, eps=norm_epsilon, **factory_kwargs
|
| 66 |
+
)
|
| 67 |
+
if d_intermediate == 0:
|
| 68 |
+
mlp_cls = nn.Identity
|
| 69 |
+
else:
|
| 70 |
+
mlp_cls = partial(
|
| 71 |
+
GatedMLP, hidden_features=d_intermediate, out_features=d_model, **factory_kwargs
|
| 72 |
+
)
|
| 73 |
+
block = Block(
|
| 74 |
+
d_model,
|
| 75 |
+
mixer_cls,
|
| 76 |
+
mlp_cls,
|
| 77 |
+
norm_cls=norm_cls,
|
| 78 |
+
fused_add_norm=fused_add_norm,
|
| 79 |
+
residual_in_fp32=residual_in_fp32,
|
| 80 |
+
)
|
| 81 |
+
block.layer_idx = layer_idx
|
| 82 |
+
return block
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
# https://github.com/huggingface/transformers/blob/c28d04e9e252a1a099944e325685f14d242ecdcd/src/transformers/models/gpt2/modeling_gpt2.py#L454
|
| 86 |
+
def _init_weights(
|
| 87 |
+
module,
|
| 88 |
+
n_layer,
|
| 89 |
+
initializer_range=0.02, # Now only used for embedding layer.
|
| 90 |
+
rescale_prenorm_residual=True,
|
| 91 |
+
n_residuals_per_layer=1, # Change to 2 if we have MLP
|
| 92 |
+
):
|
| 93 |
+
if isinstance(module, nn.Linear):
|
| 94 |
+
if module.bias is not None:
|
| 95 |
+
if not getattr(module.bias, "_no_reinit", False):
|
| 96 |
+
nn.init.zeros_(module.bias)
|
| 97 |
+
elif isinstance(module, nn.Embedding):
|
| 98 |
+
nn.init.normal_(module.weight, std=initializer_range)
|
| 99 |
+
|
| 100 |
+
if rescale_prenorm_residual:
|
| 101 |
+
# Reinitialize selected weights subject to the OpenAI GPT-2 Paper Scheme:
|
| 102 |
+
# > A modified initialization which accounts for the accumulation on the residual path with model depth. Scale
|
| 103 |
+
# > the weights of residual layers at initialization by a factor of 1/√N where N is the # of residual layers.
|
| 104 |
+
# > -- GPT-2 :: https://openai.com/blog/better-language-models/
|
| 105 |
+
#
|
| 106 |
+
# Reference (Megatron-LM): https://github.com/NVIDIA/Megatron-LM/blob/main/megatron/model/gpt_model.py
|
| 107 |
+
for name, p in module.named_parameters():
|
| 108 |
+
if name in ["out_proj.weight", "fc2.weight"]:
|
| 109 |
+
# Special Scaled Initialization --> There are 2 Layer Norms per Transformer Block
|
| 110 |
+
# Following Pytorch init, except scale by 1/sqrt(2 * n_layer)
|
| 111 |
+
# We need to reinit p since this code could be called multiple times
|
| 112 |
+
# Having just p *= scale would repeatedly scale it down
|
| 113 |
+
nn.init.kaiming_uniform_(p, a=math.sqrt(5))
|
| 114 |
+
with torch.no_grad():
|
| 115 |
+
p /= math.sqrt(n_residuals_per_layer * n_layer)
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
class MixerModel(nn.Module):
|
| 119 |
+
def __init__(
|
| 120 |
+
self,
|
| 121 |
+
d_model: int,
|
| 122 |
+
n_layer: int,
|
| 123 |
+
d_intermediate: int,
|
| 124 |
+
vocab_size: int,
|
| 125 |
+
ssm_cfg=None,
|
| 126 |
+
attn_layer_idx=None,
|
| 127 |
+
attn_cfg=None,
|
| 128 |
+
norm_epsilon: float = 1e-5,
|
| 129 |
+
rms_norm: bool = False,
|
| 130 |
+
initializer_cfg=None,
|
| 131 |
+
fused_add_norm=False,
|
| 132 |
+
residual_in_fp32=False,
|
| 133 |
+
device=None,
|
| 134 |
+
dtype=None,
|
| 135 |
+
) -> None:
|
| 136 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 137 |
+
super().__init__()
|
| 138 |
+
self.residual_in_fp32 = residual_in_fp32
|
| 139 |
+
|
| 140 |
+
self.embedding = nn.Embedding(vocab_size, d_model, **factory_kwargs)
|
| 141 |
+
|
| 142 |
+
# We change the order of residual and layer norm:
|
| 143 |
+
# Instead of LN -> Attn / MLP -> Add, we do:
|
| 144 |
+
# Add -> LN -> Attn / MLP / Mixer, returning both the residual branch (output of Add) and
|
| 145 |
+
# the main branch (output of MLP / Mixer). The model definition is unchanged.
|
| 146 |
+
# This is for performance reason: we can fuse add + layer_norm.
|
| 147 |
+
self.fused_add_norm = fused_add_norm
|
| 148 |
+
if self.fused_add_norm:
|
| 149 |
+
if layer_norm_fn is None or rms_norm_fn is None:
|
| 150 |
+
raise ImportError("Failed to import Triton LayerNorm / RMSNorm kernels")
|
| 151 |
+
|
| 152 |
+
self.layers = nn.ModuleList(
|
| 153 |
+
[
|
| 154 |
+
create_block(
|
| 155 |
+
d_model,
|
| 156 |
+
d_intermediate=d_intermediate,
|
| 157 |
+
ssm_cfg=ssm_cfg,
|
| 158 |
+
attn_layer_idx=attn_layer_idx,
|
| 159 |
+
attn_cfg=attn_cfg,
|
| 160 |
+
norm_epsilon=norm_epsilon,
|
| 161 |
+
rms_norm=rms_norm,
|
| 162 |
+
residual_in_fp32=residual_in_fp32,
|
| 163 |
+
fused_add_norm=fused_add_norm,
|
| 164 |
+
layer_idx=i,
|
| 165 |
+
**factory_kwargs,
|
| 166 |
+
)
|
| 167 |
+
for i in range(n_layer)
|
| 168 |
+
]
|
| 169 |
+
)
|
| 170 |
+
|
| 171 |
+
self.norm_f = (nn.LayerNorm if not rms_norm else RMSNorm)(
|
| 172 |
+
d_model, eps=norm_epsilon, **factory_kwargs
|
| 173 |
+
)
|
| 174 |
+
|
| 175 |
+
self.apply(
|
| 176 |
+
partial(
|
| 177 |
+
_init_weights,
|
| 178 |
+
n_layer=n_layer,
|
| 179 |
+
**(initializer_cfg if initializer_cfg is not None else {}),
|
| 180 |
+
n_residuals_per_layer=1 if d_intermediate == 0 else 2, # 2 if we have MLP
|
| 181 |
+
)
|
| 182 |
+
)
|
| 183 |
+
|
| 184 |
+
def allocate_inference_cache(self, batch_size, max_seqlen, dtype=None, **kwargs):
|
| 185 |
+
return {
|
| 186 |
+
i: layer.allocate_inference_cache(batch_size, max_seqlen, dtype=dtype, **kwargs)
|
| 187 |
+
for i, layer in enumerate(self.layers)
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
def forward(self, input_ids, inference_params=None, **mixer_kwargs):
|
| 191 |
+
hidden_states = self.embedding(input_ids)
|
| 192 |
+
residual = None
|
| 193 |
+
for layer in self.layers:
|
| 194 |
+
hidden_states, residual = layer(
|
| 195 |
+
hidden_states, residual, inference_params=inference_params, **mixer_kwargs
|
| 196 |
+
)
|
| 197 |
+
if not self.fused_add_norm:
|
| 198 |
+
residual = (hidden_states + residual) if residual is not None else hidden_states
|
| 199 |
+
hidden_states = self.norm_f(residual.to(dtype=self.norm_f.weight.dtype))
|
| 200 |
+
else:
|
| 201 |
+
# Set prenorm=False here since we don't need the residual
|
| 202 |
+
hidden_states = layer_norm_fn(
|
| 203 |
+
hidden_states,
|
| 204 |
+
self.norm_f.weight,
|
| 205 |
+
self.norm_f.bias,
|
| 206 |
+
eps=self.norm_f.eps,
|
| 207 |
+
residual=residual,
|
| 208 |
+
prenorm=False,
|
| 209 |
+
residual_in_fp32=self.residual_in_fp32,
|
| 210 |
+
is_rms_norm=isinstance(self.norm_f, RMSNorm)
|
| 211 |
+
)
|
| 212 |
+
return hidden_states
|
| 213 |
+
|
| 214 |
+
|
| 215 |
+
class MambaLMHeadModel(nn.Module, GenerationMixin):
|
| 216 |
+
|
| 217 |
+
def __init__(
|
| 218 |
+
self,
|
| 219 |
+
config: MambaConfig,
|
| 220 |
+
initializer_cfg=None,
|
| 221 |
+
device=None,
|
| 222 |
+
dtype=None,
|
| 223 |
+
) -> None:
|
| 224 |
+
self.config = config
|
| 225 |
+
d_model = config.d_model
|
| 226 |
+
n_layer = config.n_layer
|
| 227 |
+
d_intermediate = config.d_intermediate
|
| 228 |
+
vocab_size = config.vocab_size
|
| 229 |
+
ssm_cfg = config.ssm_cfg
|
| 230 |
+
attn_layer_idx = config.attn_layer_idx
|
| 231 |
+
attn_cfg = config.attn_cfg
|
| 232 |
+
rms_norm = config.rms_norm
|
| 233 |
+
residual_in_fp32 = config.residual_in_fp32
|
| 234 |
+
fused_add_norm = config.fused_add_norm
|
| 235 |
+
pad_vocab_size_multiple = config.pad_vocab_size_multiple
|
| 236 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 237 |
+
|
| 238 |
+
super().__init__()
|
| 239 |
+
if vocab_size % pad_vocab_size_multiple != 0:
|
| 240 |
+
vocab_size += pad_vocab_size_multiple - (vocab_size % pad_vocab_size_multiple)
|
| 241 |
+
self.backbone = MixerModel(
|
| 242 |
+
d_model=d_model,
|
| 243 |
+
n_layer=n_layer,
|
| 244 |
+
d_intermediate=d_intermediate,
|
| 245 |
+
vocab_size=vocab_size,
|
| 246 |
+
ssm_cfg=ssm_cfg,
|
| 247 |
+
attn_layer_idx=attn_layer_idx,
|
| 248 |
+
attn_cfg=attn_cfg,
|
| 249 |
+
rms_norm=rms_norm,
|
| 250 |
+
initializer_cfg=initializer_cfg,
|
| 251 |
+
fused_add_norm=fused_add_norm,
|
| 252 |
+
residual_in_fp32=residual_in_fp32,
|
| 253 |
+
**factory_kwargs,
|
| 254 |
+
)
|
| 255 |
+
self.lm_head = nn.Linear(d_model, vocab_size, bias=False, **factory_kwargs)
|
| 256 |
+
|
| 257 |
+
# Initialize weights and apply final processing
|
| 258 |
+
self.apply(
|
| 259 |
+
partial(
|
| 260 |
+
_init_weights,
|
| 261 |
+
n_layer=n_layer,
|
| 262 |
+
**(initializer_cfg if initializer_cfg is not None else {}),
|
| 263 |
+
)
|
| 264 |
+
)
|
| 265 |
+
self.tie_weights()
|
| 266 |
+
|
| 267 |
+
def tie_weights(self):
|
| 268 |
+
if self.config.tie_embeddings:
|
| 269 |
+
self.lm_head.weight = self.backbone.embedding.weight
|
| 270 |
+
|
| 271 |
+
def allocate_inference_cache(self, batch_size, max_seqlen, dtype=None, **kwargs):
|
| 272 |
+
return self.backbone.allocate_inference_cache(batch_size, max_seqlen, dtype=dtype, **kwargs)
|
| 273 |
+
|
| 274 |
+
def forward(self, input_ids, position_ids=None, inference_params=None, num_last_tokens=0, **mixer_kwargs):
|
| 275 |
+
"""
|
| 276 |
+
"position_ids" is just to be compatible with Transformer generation. We don't use it.
|
| 277 |
+
num_last_tokens: if > 0, only return the logits for the last n tokens
|
| 278 |
+
"""
|
| 279 |
+
hidden_states = self.backbone(input_ids, inference_params=inference_params, **mixer_kwargs)
|
| 280 |
+
if num_last_tokens > 0:
|
| 281 |
+
hidden_states = hidden_states[:, -num_last_tokens:]
|
| 282 |
+
lm_logits = self.lm_head(hidden_states)
|
| 283 |
+
CausalLMOutput = namedtuple("CausalLMOutput", ["logits"])
|
| 284 |
+
return CausalLMOutput(logits=lm_logits)
|
| 285 |
+
|
| 286 |
+
@classmethod
|
| 287 |
+
def from_pretrained(cls, pretrained_model_name, device=None, dtype=None, **kwargs):
|
| 288 |
+
config_data = load_config_hf(pretrained_model_name)
|
| 289 |
+
config = MambaConfig(**config_data)
|
| 290 |
+
model = cls(config, device=device, dtype=dtype, **kwargs)
|
| 291 |
+
model.load_state_dict(load_state_dict_hf(pretrained_model_name, device=device, dtype=dtype))
|
| 292 |
+
return model
|
| 293 |
+
|
| 294 |
+
def save_pretrained(self, save_directory):
|
| 295 |
+
"""
|
| 296 |
+
Minimal implementation of save_pretrained for MambaLMHeadModel.
|
| 297 |
+
Save the model and its configuration file to a directory.
|
| 298 |
+
"""
|
| 299 |
+
# Ensure save_directory exists
|
| 300 |
+
os.makedirs(save_directory, exist_ok=True)
|
| 301 |
+
|
| 302 |
+
# Save the model's state_dict
|
| 303 |
+
model_path = os.path.join(save_directory, 'pytorch_model.bin')
|
| 304 |
+
torch.save(self.state_dict(), model_path)
|
| 305 |
+
|
| 306 |
+
# Save the configuration of the model
|
| 307 |
+
config_path = os.path.join(save_directory, 'config.json')
|
| 308 |
+
with open(config_path, 'w') as f:
|
| 309 |
+
json.dump(self.config.__dict__, f, indent=4)
|
build/torch213-cxx11-cu126-x86_64-linux/modules/__init__.py
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .mamba_simple import Mamba
|
| 2 |
+
from .mamba2 import Mamba2
|
| 3 |
+
|
| 4 |
+
__all__ = [
|
| 5 |
+
"Mamba",
|
| 6 |
+
"Mamba2",
|
| 7 |
+
]
|
build/torch213-cxx11-cu126-x86_64-linux/modules/block.py
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Tri Dao, Albert Gu.
|
| 2 |
+
from typing import Optional
|
| 3 |
+
|
| 4 |
+
import torch
|
| 5 |
+
from torch import nn, Tensor
|
| 6 |
+
|
| 7 |
+
from ..ops.triton.layer_norm import RMSNorm, layer_norm_fn
|
| 8 |
+
|
| 9 |
+
|
| 10 |
+
class Block(nn.Module):
|
| 11 |
+
def __init__(
|
| 12 |
+
self,
|
| 13 |
+
dim,
|
| 14 |
+
mixer_cls,
|
| 15 |
+
mlp_cls,
|
| 16 |
+
norm_cls=nn.LayerNorm,
|
| 17 |
+
fused_add_norm=False,
|
| 18 |
+
residual_in_fp32=False,
|
| 19 |
+
):
|
| 20 |
+
"""
|
| 21 |
+
Simple block wrapping a mixer class with LayerNorm/RMSNorm and residual connection"
|
| 22 |
+
|
| 23 |
+
This Block has a slightly different structure compared to a regular
|
| 24 |
+
prenorm Transformer block.
|
| 25 |
+
The standard block is: LN -> MHA/MLP -> Add.
|
| 26 |
+
[Ref: https://arxiv.org/abs/2002.04745]
|
| 27 |
+
Here we have: Add -> LN -> Mixer, returning both
|
| 28 |
+
the hidden_states (output of the mixer) and the residual.
|
| 29 |
+
This is purely for performance reasons, as we can fuse add and LayerNorm.
|
| 30 |
+
The residual needs to be provided (except for the very first block).
|
| 31 |
+
"""
|
| 32 |
+
super().__init__()
|
| 33 |
+
self.residual_in_fp32 = residual_in_fp32
|
| 34 |
+
self.fused_add_norm = fused_add_norm
|
| 35 |
+
self.norm = norm_cls(dim)
|
| 36 |
+
self.mixer = mixer_cls(dim)
|
| 37 |
+
if mlp_cls is not nn.Identity:
|
| 38 |
+
self.norm2 = norm_cls(dim)
|
| 39 |
+
self.mlp = mlp_cls(dim)
|
| 40 |
+
else:
|
| 41 |
+
self.mlp = None
|
| 42 |
+
if self.fused_add_norm:
|
| 43 |
+
assert RMSNorm is not None, "RMSNorm import fails"
|
| 44 |
+
assert isinstance(
|
| 45 |
+
self.norm, (nn.LayerNorm, RMSNorm)
|
| 46 |
+
), "Only LayerNorm and RMSNorm are supported for fused_add_norm"
|
| 47 |
+
|
| 48 |
+
def forward(
|
| 49 |
+
self,
|
| 50 |
+
hidden_states: Tensor,
|
| 51 |
+
residual: Optional[Tensor] = None,
|
| 52 |
+
inference_params=None,
|
| 53 |
+
**mixer_kwargs
|
| 54 |
+
):
|
| 55 |
+
r"""Pass the input through the encoder layer.
|
| 56 |
+
|
| 57 |
+
Args:
|
| 58 |
+
hidden_states: the sequence to the encoder layer (required).
|
| 59 |
+
residual: hidden_states = Mixer(LN(residual))
|
| 60 |
+
"""
|
| 61 |
+
if not self.fused_add_norm:
|
| 62 |
+
residual = (
|
| 63 |
+
(hidden_states + residual) if residual is not None else hidden_states
|
| 64 |
+
)
|
| 65 |
+
hidden_states = self.norm(residual.to(dtype=self.norm.weight.dtype))
|
| 66 |
+
if self.residual_in_fp32:
|
| 67 |
+
residual = residual.to(torch.float32)
|
| 68 |
+
else:
|
| 69 |
+
hidden_states, residual = layer_norm_fn(
|
| 70 |
+
hidden_states,
|
| 71 |
+
self.norm.weight,
|
| 72 |
+
self.norm.bias,
|
| 73 |
+
residual=residual,
|
| 74 |
+
prenorm=True,
|
| 75 |
+
residual_in_fp32=self.residual_in_fp32,
|
| 76 |
+
eps=self.norm.eps,
|
| 77 |
+
is_rms_norm=isinstance(self.norm, RMSNorm),
|
| 78 |
+
)
|
| 79 |
+
hidden_states = self.mixer(
|
| 80 |
+
hidden_states, inference_params=inference_params, **mixer_kwargs
|
| 81 |
+
)
|
| 82 |
+
|
| 83 |
+
if self.mlp is not None:
|
| 84 |
+
if not self.fused_add_norm:
|
| 85 |
+
residual = hidden_states + residual
|
| 86 |
+
hidden_states = self.norm2(residual.to(dtype=self.norm2.weight.dtype))
|
| 87 |
+
if self.residual_in_fp32:
|
| 88 |
+
residual = residual.to(torch.float32)
|
| 89 |
+
else:
|
| 90 |
+
hidden_states, residual = layer_norm_fn(
|
| 91 |
+
hidden_states,
|
| 92 |
+
self.norm2.weight,
|
| 93 |
+
self.norm2.bias,
|
| 94 |
+
residual=residual,
|
| 95 |
+
prenorm=True,
|
| 96 |
+
residual_in_fp32=self.residual_in_fp32,
|
| 97 |
+
eps=self.norm2.eps,
|
| 98 |
+
is_rms_norm=isinstance(self.norm2, RMSNorm),
|
| 99 |
+
)
|
| 100 |
+
hidden_states = self.mlp(hidden_states)
|
| 101 |
+
|
| 102 |
+
return hidden_states, residual
|
| 103 |
+
|
| 104 |
+
def allocate_inference_cache(self, batch_size, max_seqlen, dtype=None, **kwargs):
|
| 105 |
+
return self.mixer.allocate_inference_cache(
|
| 106 |
+
batch_size, max_seqlen, dtype=dtype, **kwargs
|
| 107 |
+
)
|
build/torch213-cxx11-cu126-x86_64-linux/modules/mamba2.py
ADDED
|
@@ -0,0 +1,502 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Tri Dao, Albert Gu.
|
| 2 |
+
|
| 3 |
+
import math
|
| 4 |
+
|
| 5 |
+
import torch
|
| 6 |
+
import torch.nn as nn
|
| 7 |
+
import torch.nn.functional as F
|
| 8 |
+
|
| 9 |
+
from einops import rearrange, repeat
|
| 10 |
+
|
| 11 |
+
try:
|
| 12 |
+
from causal_conv1d import causal_conv1d_fn, causal_conv1d_update
|
| 13 |
+
except ImportError:
|
| 14 |
+
causal_conv1d_fn, causal_conv1d_update = None, None
|
| 15 |
+
|
| 16 |
+
try:
|
| 17 |
+
from causal_conv1d.causal_conv1d_varlen import causal_conv1d_varlen_states
|
| 18 |
+
except ImportError:
|
| 19 |
+
causal_conv1d_varlen_states = None
|
| 20 |
+
|
| 21 |
+
try:
|
| 22 |
+
from ..ops.triton.selective_state_update import selective_state_update
|
| 23 |
+
except ImportError:
|
| 24 |
+
selective_state_update = None
|
| 25 |
+
|
| 26 |
+
from ..ops.triton.layernorm_gated import RMSNorm as RMSNormGated
|
| 27 |
+
|
| 28 |
+
from ..distributed.tensor_parallel import ColumnParallelLinear, RowParallelLinear
|
| 29 |
+
from ..distributed.distributed_utils import all_reduce, reduce_scatter
|
| 30 |
+
|
| 31 |
+
from ..ops.triton.ssd_combined import mamba_chunk_scan_combined
|
| 32 |
+
from ..ops.triton.ssd_combined import mamba_split_conv1d_scan_combined
|
| 33 |
+
|
| 34 |
+
from huggingface_hub import PyTorchModelHubMixin
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
class Mamba2(nn.Module, PyTorchModelHubMixin):
|
| 38 |
+
def __init__(
|
| 39 |
+
self,
|
| 40 |
+
d_model,
|
| 41 |
+
d_state=128,
|
| 42 |
+
d_conv=4,
|
| 43 |
+
conv_init=None,
|
| 44 |
+
expand=2,
|
| 45 |
+
headdim=64,
|
| 46 |
+
d_ssm=None, # If not None, we only apply SSM on this many dimensions, the rest uses gated MLP
|
| 47 |
+
ngroups=1,
|
| 48 |
+
A_init_range=(1, 16),
|
| 49 |
+
D_has_hdim=False,
|
| 50 |
+
rmsnorm=True,
|
| 51 |
+
norm_before_gate=False,
|
| 52 |
+
dt_min=0.001,
|
| 53 |
+
dt_max=0.1,
|
| 54 |
+
dt_init_floor=1e-4,
|
| 55 |
+
dt_limit=(0.0, float("inf")),
|
| 56 |
+
bias=False,
|
| 57 |
+
conv_bias=True,
|
| 58 |
+
# Fused kernel and sharding options
|
| 59 |
+
chunk_size=256,
|
| 60 |
+
use_mem_eff_path=True,
|
| 61 |
+
layer_idx=None, # Absorb kwarg for general module
|
| 62 |
+
process_group=None,
|
| 63 |
+
sequence_parallel=True,
|
| 64 |
+
device=None,
|
| 65 |
+
dtype=None,
|
| 66 |
+
):
|
| 67 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 68 |
+
super().__init__()
|
| 69 |
+
self.d_model = d_model
|
| 70 |
+
self.d_state = d_state
|
| 71 |
+
self.d_conv = d_conv
|
| 72 |
+
self.conv_init = conv_init
|
| 73 |
+
self.expand = expand
|
| 74 |
+
self.process_group = process_group
|
| 75 |
+
self.sequence_parallel = sequence_parallel
|
| 76 |
+
self.world_size = 1 if process_group is None else process_group.size()
|
| 77 |
+
self.local_rank = 0 if process_group is None else process_group.rank()
|
| 78 |
+
self.d_inner = (self.expand * self.d_model) // self.world_size
|
| 79 |
+
assert self.d_inner * self.world_size == self.expand * self.d_model
|
| 80 |
+
self.headdim = headdim
|
| 81 |
+
self.d_ssm = self.d_inner if d_ssm is None else d_ssm // self.world_size
|
| 82 |
+
assert ngroups % self.world_size == 0
|
| 83 |
+
self.ngroups = ngroups // self.world_size
|
| 84 |
+
assert self.d_ssm % self.headdim == 0
|
| 85 |
+
self.nheads = self.d_ssm // self.headdim
|
| 86 |
+
self.D_has_hdim = D_has_hdim
|
| 87 |
+
self.rmsnorm = rmsnorm
|
| 88 |
+
self.norm_before_gate = norm_before_gate
|
| 89 |
+
self.dt_limit = dt_limit
|
| 90 |
+
self.activation = "silu"
|
| 91 |
+
self.chunk_size = chunk_size
|
| 92 |
+
self.use_mem_eff_path = use_mem_eff_path
|
| 93 |
+
self.layer_idx = layer_idx
|
| 94 |
+
|
| 95 |
+
# Order: [z, x, B, C, dt]
|
| 96 |
+
d_in_proj = 2 * self.d_inner + 2 * self.ngroups * self.d_state + self.nheads
|
| 97 |
+
if self.process_group is None:
|
| 98 |
+
self.in_proj = nn.Linear(
|
| 99 |
+
self.d_model, d_in_proj, bias=bias, **factory_kwargs
|
| 100 |
+
)
|
| 101 |
+
else:
|
| 102 |
+
self.in_proj = ColumnParallelLinear(
|
| 103 |
+
self.d_model,
|
| 104 |
+
d_in_proj * self.world_size,
|
| 105 |
+
bias=bias,
|
| 106 |
+
process_group=self.process_group,
|
| 107 |
+
sequence_parallel=self.sequence_parallel,
|
| 108 |
+
**factory_kwargs,
|
| 109 |
+
)
|
| 110 |
+
|
| 111 |
+
conv_dim = self.d_ssm + 2 * self.ngroups * self.d_state
|
| 112 |
+
self.conv1d = nn.Conv1d(
|
| 113 |
+
in_channels=conv_dim,
|
| 114 |
+
out_channels=conv_dim,
|
| 115 |
+
bias=conv_bias,
|
| 116 |
+
kernel_size=d_conv,
|
| 117 |
+
groups=conv_dim,
|
| 118 |
+
padding=d_conv - 1,
|
| 119 |
+
**factory_kwargs,
|
| 120 |
+
)
|
| 121 |
+
if self.conv_init is not None:
|
| 122 |
+
nn.init.uniform_(self.conv1d.weight, -self.conv_init, self.conv_init)
|
| 123 |
+
|
| 124 |
+
self.act = nn.SiLU()
|
| 125 |
+
|
| 126 |
+
# Initialize log dt bias
|
| 127 |
+
dt = torch.exp(
|
| 128 |
+
torch.rand(self.nheads, **factory_kwargs)
|
| 129 |
+
* (math.log(dt_max) - math.log(dt_min))
|
| 130 |
+
+ math.log(dt_min)
|
| 131 |
+
)
|
| 132 |
+
dt = torch.clamp(dt, min=dt_init_floor)
|
| 133 |
+
# Inverse of softplus: https://github.com/pytorch/pytorch/issues/72759
|
| 134 |
+
inv_dt = dt + torch.log(-torch.expm1(-dt))
|
| 135 |
+
self.dt_bias = nn.Parameter(inv_dt)
|
| 136 |
+
# Just to be explicit. Without this we already don't put wd on dt_bias because of the check
|
| 137 |
+
# name.endswith("bias") in param_grouping.py
|
| 138 |
+
self.dt_bias._no_weight_decay = True
|
| 139 |
+
|
| 140 |
+
assert A_init_range[0] > 0 and A_init_range[1] >= A_init_range[0]
|
| 141 |
+
A = torch.empty(self.nheads, dtype=torch.float32, device=device).uniform_(
|
| 142 |
+
*A_init_range
|
| 143 |
+
)
|
| 144 |
+
A_log = torch.log(A).to(dtype=dtype)
|
| 145 |
+
self.A_log = nn.Parameter(A_log)
|
| 146 |
+
self.A_log._no_weight_decay = True
|
| 147 |
+
|
| 148 |
+
# D "skip" parameter
|
| 149 |
+
self.D = nn.Parameter(
|
| 150 |
+
torch.ones(self.d_ssm if self.D_has_hdim else self.nheads, device=device)
|
| 151 |
+
)
|
| 152 |
+
self.D._no_weight_decay = True
|
| 153 |
+
|
| 154 |
+
if self.rmsnorm:
|
| 155 |
+
assert RMSNormGated is not None
|
| 156 |
+
self.norm = RMSNormGated(
|
| 157 |
+
self.d_ssm,
|
| 158 |
+
eps=1e-5,
|
| 159 |
+
norm_before_gate=self.norm_before_gate,
|
| 160 |
+
group_size=self.d_ssm // ngroups,
|
| 161 |
+
**factory_kwargs,
|
| 162 |
+
)
|
| 163 |
+
|
| 164 |
+
if self.process_group is None:
|
| 165 |
+
self.out_proj = nn.Linear(
|
| 166 |
+
self.d_inner, self.d_model, bias=bias, **factory_kwargs
|
| 167 |
+
)
|
| 168 |
+
else:
|
| 169 |
+
self.out_proj = RowParallelLinear(
|
| 170 |
+
self.d_inner * self.world_size,
|
| 171 |
+
self.d_model,
|
| 172 |
+
bias=bias,
|
| 173 |
+
process_group=self.process_group,
|
| 174 |
+
sequence_parallel=self.sequence_parallel,
|
| 175 |
+
**factory_kwargs,
|
| 176 |
+
)
|
| 177 |
+
|
| 178 |
+
def forward(
|
| 179 |
+
self, u, seqlen=None, seq_idx=None, cu_seqlens=None, inference_params=None
|
| 180 |
+
):
|
| 181 |
+
"""
|
| 182 |
+
u: (batch, seqlen, hidden_dim) if seqlen=None.
|
| 183 |
+
If seqlen is not None, u is (batch * seqlen, hidden_dim). This is so that when we
|
| 184 |
+
split u during sequence parallel, we split the batch * seqlen dimension
|
| 185 |
+
(in case batch is small).
|
| 186 |
+
Returns: same shape as u
|
| 187 |
+
"""
|
| 188 |
+
seqlen_og = seqlen
|
| 189 |
+
if seqlen is None:
|
| 190 |
+
batch, seqlen, dim = u.shape
|
| 191 |
+
else:
|
| 192 |
+
batch_seqlen, dim = u.shape
|
| 193 |
+
batch = batch_seqlen // seqlen
|
| 194 |
+
|
| 195 |
+
conv_state, ssm_state = None, None
|
| 196 |
+
if inference_params is not None:
|
| 197 |
+
inference_batch = (
|
| 198 |
+
cu_seqlens.shape[0] - 1 if cu_seqlens is not None else batch
|
| 199 |
+
)
|
| 200 |
+
conv_state, ssm_state = self._get_states_from_cache(
|
| 201 |
+
inference_params, inference_batch
|
| 202 |
+
)
|
| 203 |
+
if inference_params.seqlen_offset > 0:
|
| 204 |
+
# The states are updated inplace
|
| 205 |
+
out, _, _ = self.step(u, conv_state, ssm_state)
|
| 206 |
+
return out
|
| 207 |
+
|
| 208 |
+
zxbcdt = self.in_proj(u) # (B, L, d_in_proj) or (B * L, d_in_proj)
|
| 209 |
+
if seqlen_og is not None:
|
| 210 |
+
zxbcdt = rearrange(zxbcdt, "(b l) d -> b l d", l=seqlen)
|
| 211 |
+
# If the model is loaded in fp16, without the .float() here, A might be -inf
|
| 212 |
+
A = -torch.exp(self.A_log.float()) # (nheads) or (d_inner, d_state)
|
| 213 |
+
dt_limit_kwargs = (
|
| 214 |
+
{} if self.dt_limit == (0.0, float("inf")) else dict(dt_limit=self.dt_limit)
|
| 215 |
+
)
|
| 216 |
+
if self.use_mem_eff_path and inference_params is None:
|
| 217 |
+
out = mamba_split_conv1d_scan_combined(
|
| 218 |
+
zxbcdt,
|
| 219 |
+
rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 220 |
+
self.conv1d.bias,
|
| 221 |
+
self.dt_bias,
|
| 222 |
+
A,
|
| 223 |
+
D=(
|
| 224 |
+
rearrange(self.D, "(h p) -> h p", p=self.headdim)
|
| 225 |
+
if self.D_has_hdim
|
| 226 |
+
else self.D
|
| 227 |
+
),
|
| 228 |
+
chunk_size=self.chunk_size,
|
| 229 |
+
seq_idx=seq_idx,
|
| 230 |
+
activation=self.activation,
|
| 231 |
+
rmsnorm_weight=self.norm.weight if self.rmsnorm else None,
|
| 232 |
+
rmsnorm_eps=self.norm.eps if self.rmsnorm else 1e-6,
|
| 233 |
+
outproj_weight=self.out_proj.weight,
|
| 234 |
+
outproj_bias=self.out_proj.bias,
|
| 235 |
+
headdim=None if self.D_has_hdim else self.headdim,
|
| 236 |
+
ngroups=self.ngroups,
|
| 237 |
+
norm_before_gate=self.norm_before_gate,
|
| 238 |
+
**dt_limit_kwargs,
|
| 239 |
+
)
|
| 240 |
+
if seqlen_og is not None:
|
| 241 |
+
out = rearrange(out, "b l d -> (b l) d")
|
| 242 |
+
if self.process_group is not None:
|
| 243 |
+
reduce_fn = reduce_scatter if self.sequence_parallel else all_reduce
|
| 244 |
+
out = reduce_fn(out, self.process_group)
|
| 245 |
+
else:
|
| 246 |
+
d_mlp = (
|
| 247 |
+
zxbcdt.shape[-1]
|
| 248 |
+
- 2 * self.d_ssm
|
| 249 |
+
- 2 * self.ngroups * self.d_state
|
| 250 |
+
- self.nheads
|
| 251 |
+
) // 2
|
| 252 |
+
z0, x0, z, xBC, dt = torch.split(
|
| 253 |
+
zxbcdt,
|
| 254 |
+
[
|
| 255 |
+
d_mlp,
|
| 256 |
+
d_mlp,
|
| 257 |
+
self.d_ssm,
|
| 258 |
+
self.d_ssm + 2 * self.ngroups * self.d_state,
|
| 259 |
+
self.nheads,
|
| 260 |
+
],
|
| 261 |
+
dim=-1,
|
| 262 |
+
)
|
| 263 |
+
if conv_state is not None:
|
| 264 |
+
if cu_seqlens is None:
|
| 265 |
+
# If we just take xBC[:, :, -self.d_conv :], it will error if seqlen < self.d_conv
|
| 266 |
+
# Instead F.pad will pad with zeros if seqlen < self.d_conv, and truncate otherwise.
|
| 267 |
+
xBC_t = rearrange(xBC, "b l d -> b d l")
|
| 268 |
+
conv_state.copy_(
|
| 269 |
+
F.pad(xBC_t, (self.d_conv - xBC_t.shape[-1], 0))
|
| 270 |
+
) # Update state (B D W)
|
| 271 |
+
else:
|
| 272 |
+
assert (
|
| 273 |
+
causal_conv1d_varlen_states is not None
|
| 274 |
+
), "varlen inference requires causal_conv1d package"
|
| 275 |
+
assert (
|
| 276 |
+
batch == 1
|
| 277 |
+
), "varlen inference only supports batch dimension 1"
|
| 278 |
+
conv_varlen_states = causal_conv1d_varlen_states(
|
| 279 |
+
xBC.squeeze(0), cu_seqlens, state_len=conv_state.shape[-1]
|
| 280 |
+
)
|
| 281 |
+
conv_state.copy_(conv_varlen_states)
|
| 282 |
+
assert self.activation in ["silu", "swish"]
|
| 283 |
+
if causal_conv1d_fn is None or self.activation not in ["silu", "swish"]:
|
| 284 |
+
assert (
|
| 285 |
+
seq_idx is None
|
| 286 |
+
), "varlen conv1d requires the causal_conv1d package"
|
| 287 |
+
xBC = self.act(
|
| 288 |
+
self.conv1d(xBC.transpose(1, 2)).transpose(1, 2)[
|
| 289 |
+
:, : -(self.d_conv - 1)
|
| 290 |
+
]
|
| 291 |
+
) # (B, L, self.d_ssm + 2 * ngroups * d_state)
|
| 292 |
+
else:
|
| 293 |
+
xBC = causal_conv1d_fn(
|
| 294 |
+
xBC.transpose(1, 2),
|
| 295 |
+
rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 296 |
+
bias=self.conv1d.bias,
|
| 297 |
+
activation=self.activation,
|
| 298 |
+
seq_idx=seq_idx,
|
| 299 |
+
).transpose(1, 2)
|
| 300 |
+
x, B, C = torch.split(
|
| 301 |
+
xBC,
|
| 302 |
+
[self.d_ssm, self.ngroups * self.d_state, self.ngroups * self.d_state],
|
| 303 |
+
dim=-1,
|
| 304 |
+
)
|
| 305 |
+
y = mamba_chunk_scan_combined(
|
| 306 |
+
rearrange(x, "b l (h p) -> b l h p", p=self.headdim),
|
| 307 |
+
dt,
|
| 308 |
+
A,
|
| 309 |
+
rearrange(B, "b l (g n) -> b l g n", g=self.ngroups),
|
| 310 |
+
rearrange(C, "b l (g n) -> b l g n", g=self.ngroups),
|
| 311 |
+
chunk_size=self.chunk_size,
|
| 312 |
+
D=(
|
| 313 |
+
rearrange(self.D, "(h p) -> h p", p=self.headdim)
|
| 314 |
+
if self.D_has_hdim
|
| 315 |
+
else self.D
|
| 316 |
+
),
|
| 317 |
+
z=(
|
| 318 |
+
rearrange(z, "b l (h p) -> b l h p", p=self.headdim)
|
| 319 |
+
if not self.rmsnorm
|
| 320 |
+
else None
|
| 321 |
+
),
|
| 322 |
+
dt_bias=self.dt_bias,
|
| 323 |
+
dt_softplus=True,
|
| 324 |
+
seq_idx=seq_idx,
|
| 325 |
+
cu_seqlens=cu_seqlens,
|
| 326 |
+
**dt_limit_kwargs,
|
| 327 |
+
return_final_states=ssm_state is not None,
|
| 328 |
+
return_varlen_states=cu_seqlens is not None
|
| 329 |
+
and inference_params is not None,
|
| 330 |
+
)
|
| 331 |
+
if ssm_state is not None:
|
| 332 |
+
y, last_state, *rest = y
|
| 333 |
+
if cu_seqlens is None:
|
| 334 |
+
ssm_state.copy_(last_state)
|
| 335 |
+
else:
|
| 336 |
+
varlen_states = rest[0]
|
| 337 |
+
ssm_state.copy_(varlen_states)
|
| 338 |
+
y = rearrange(y, "b l h p -> b l (h p)")
|
| 339 |
+
if self.rmsnorm:
|
| 340 |
+
y = self.norm(y, z)
|
| 341 |
+
if d_mlp > 0:
|
| 342 |
+
y = torch.cat([F.silu(z0) * x0, y], dim=-1)
|
| 343 |
+
if seqlen_og is not None:
|
| 344 |
+
y = rearrange(y, "b l d -> (b l) d")
|
| 345 |
+
out = self.out_proj(y)
|
| 346 |
+
return out
|
| 347 |
+
|
| 348 |
+
def step(self, hidden_states, conv_state, ssm_state):
|
| 349 |
+
dtype = hidden_states.dtype
|
| 350 |
+
assert (
|
| 351 |
+
hidden_states.shape[1] == 1
|
| 352 |
+
), "Only support decoding with 1 token at a time for now"
|
| 353 |
+
zxbcdt = self.in_proj(hidden_states.squeeze(1)) # (B 2D)
|
| 354 |
+
d_mlp = (
|
| 355 |
+
zxbcdt.shape[-1]
|
| 356 |
+
- 2 * self.d_ssm
|
| 357 |
+
- 2 * self.ngroups * self.d_state
|
| 358 |
+
- self.nheads
|
| 359 |
+
) // 2
|
| 360 |
+
z0, x0, z, xBC, dt = torch.split(
|
| 361 |
+
zxbcdt,
|
| 362 |
+
[
|
| 363 |
+
d_mlp,
|
| 364 |
+
d_mlp,
|
| 365 |
+
self.d_ssm,
|
| 366 |
+
self.d_ssm + 2 * self.ngroups * self.d_state,
|
| 367 |
+
self.nheads,
|
| 368 |
+
],
|
| 369 |
+
dim=-1,
|
| 370 |
+
)
|
| 371 |
+
|
| 372 |
+
# Conv step
|
| 373 |
+
if causal_conv1d_update is None:
|
| 374 |
+
conv_state.copy_(
|
| 375 |
+
torch.roll(conv_state, shifts=-1, dims=-1)
|
| 376 |
+
) # Update state (B D W)
|
| 377 |
+
conv_state[:, :, -1] = xBC
|
| 378 |
+
xBC = torch.sum(
|
| 379 |
+
conv_state * rearrange(self.conv1d.weight, "d 1 w -> d w"), dim=-1
|
| 380 |
+
) # (B D)
|
| 381 |
+
if self.conv1d.bias is not None:
|
| 382 |
+
xBC = xBC + self.conv1d.bias
|
| 383 |
+
xBC = self.act(xBC).to(dtype=dtype)
|
| 384 |
+
else:
|
| 385 |
+
xBC = causal_conv1d_update(
|
| 386 |
+
xBC,
|
| 387 |
+
conv_state,
|
| 388 |
+
rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 389 |
+
self.conv1d.bias,
|
| 390 |
+
self.activation,
|
| 391 |
+
)
|
| 392 |
+
|
| 393 |
+
x, B, C = torch.split(
|
| 394 |
+
xBC,
|
| 395 |
+
[self.d_ssm, self.ngroups * self.d_state, self.ngroups * self.d_state],
|
| 396 |
+
dim=-1,
|
| 397 |
+
)
|
| 398 |
+
A = -torch.exp(self.A_log.float()) # (nheads,)
|
| 399 |
+
|
| 400 |
+
# SSM step
|
| 401 |
+
if selective_state_update is None:
|
| 402 |
+
assert (
|
| 403 |
+
self.ngroups == 1
|
| 404 |
+
), "Only support ngroups=1 for this inference code path"
|
| 405 |
+
# Discretize A and B
|
| 406 |
+
dt = F.softplus(dt + self.dt_bias.to(dtype=dt.dtype)) # (batch, nheads)
|
| 407 |
+
dA = torch.exp(dt * A) # (batch, nheads)
|
| 408 |
+
x = rearrange(x, "b (h p) -> b h p", p=self.headdim)
|
| 409 |
+
dBx = torch.einsum("bh,bn,bhp->bhpn", dt, B, x)
|
| 410 |
+
ssm_state.copy_(ssm_state * rearrange(dA, "b h -> b h 1 1") + dBx)
|
| 411 |
+
y = torch.einsum("bhpn,bn->bhp", ssm_state.to(dtype), C)
|
| 412 |
+
y = y + rearrange(self.D.to(dtype), "h -> h 1") * x
|
| 413 |
+
y = rearrange(y, "b h p -> b (h p)")
|
| 414 |
+
if not self.rmsnorm:
|
| 415 |
+
y = y * self.act(z) # (B D)
|
| 416 |
+
else:
|
| 417 |
+
A = repeat(A, "h -> h p n", p=self.headdim, n=self.d_state).to(
|
| 418 |
+
dtype=torch.float32
|
| 419 |
+
)
|
| 420 |
+
dt = repeat(dt, "b h -> b h p", p=self.headdim)
|
| 421 |
+
dt_bias = repeat(self.dt_bias, "h -> h p", p=self.headdim)
|
| 422 |
+
D = repeat(self.D, "h -> h p", p=self.headdim)
|
| 423 |
+
B = rearrange(B, "b (g n) -> b g n", g=self.ngroups)
|
| 424 |
+
C = rearrange(C, "b (g n) -> b g n", g=self.ngroups)
|
| 425 |
+
x_reshaped = rearrange(x, "b (h p) -> b h p", p=self.headdim)
|
| 426 |
+
if not self.rmsnorm:
|
| 427 |
+
z = rearrange(z, "b (h p) -> b h p", p=self.headdim)
|
| 428 |
+
y = selective_state_update(
|
| 429 |
+
ssm_state,
|
| 430 |
+
x_reshaped,
|
| 431 |
+
dt,
|
| 432 |
+
A,
|
| 433 |
+
B,
|
| 434 |
+
C,
|
| 435 |
+
D,
|
| 436 |
+
z=z if not self.rmsnorm else None,
|
| 437 |
+
dt_bias=dt_bias,
|
| 438 |
+
dt_softplus=True,
|
| 439 |
+
)
|
| 440 |
+
y = rearrange(y, "b h p -> b (h p)")
|
| 441 |
+
if self.rmsnorm:
|
| 442 |
+
y = self.norm(y, z)
|
| 443 |
+
if d_mlp > 0:
|
| 444 |
+
y = torch.cat([F.silu(z0) * x0, y], dim=-1)
|
| 445 |
+
out = self.out_proj(y)
|
| 446 |
+
return out.unsqueeze(1), conv_state, ssm_state
|
| 447 |
+
|
| 448 |
+
def allocate_inference_cache(self, batch_size, max_seqlen, dtype=None, **kwargs):
|
| 449 |
+
device = self.out_proj.weight.device
|
| 450 |
+
conv_dtype = self.conv1d.weight.dtype if dtype is None else dtype
|
| 451 |
+
conv_state = torch.zeros(
|
| 452 |
+
batch_size,
|
| 453 |
+
self.d_conv,
|
| 454 |
+
self.conv1d.weight.shape[0],
|
| 455 |
+
device=device,
|
| 456 |
+
dtype=conv_dtype,
|
| 457 |
+
).transpose(1, 2)
|
| 458 |
+
ssm_dtype = self.in_proj.weight.dtype if dtype is None else dtype
|
| 459 |
+
ssm_state = torch.zeros(
|
| 460 |
+
batch_size,
|
| 461 |
+
self.nheads,
|
| 462 |
+
self.headdim,
|
| 463 |
+
self.d_state,
|
| 464 |
+
device=device,
|
| 465 |
+
dtype=ssm_dtype,
|
| 466 |
+
)
|
| 467 |
+
return conv_state, ssm_state
|
| 468 |
+
|
| 469 |
+
def _get_states_from_cache(
|
| 470 |
+
self, inference_params, batch_size, initialize_states=False
|
| 471 |
+
):
|
| 472 |
+
assert self.layer_idx is not None
|
| 473 |
+
if self.layer_idx not in inference_params.key_value_memory_dict:
|
| 474 |
+
batch_shape = (batch_size,)
|
| 475 |
+
conv_state = torch.zeros(
|
| 476 |
+
batch_size,
|
| 477 |
+
self.d_conv,
|
| 478 |
+
self.conv1d.weight.shape[0],
|
| 479 |
+
device=self.conv1d.weight.device,
|
| 480 |
+
dtype=self.conv1d.weight.dtype,
|
| 481 |
+
).transpose(1, 2)
|
| 482 |
+
ssm_state = torch.zeros(
|
| 483 |
+
batch_size,
|
| 484 |
+
self.nheads,
|
| 485 |
+
self.headdim,
|
| 486 |
+
self.d_state,
|
| 487 |
+
device=self.in_proj.weight.device,
|
| 488 |
+
dtype=self.in_proj.weight.dtype,
|
| 489 |
+
)
|
| 490 |
+
inference_params.key_value_memory_dict[self.layer_idx] = (
|
| 491 |
+
conv_state,
|
| 492 |
+
ssm_state,
|
| 493 |
+
)
|
| 494 |
+
else:
|
| 495 |
+
conv_state, ssm_state = inference_params.key_value_memory_dict[
|
| 496 |
+
self.layer_idx
|
| 497 |
+
]
|
| 498 |
+
# TODO: What if batch size changes between generation, and we reuse the same states?
|
| 499 |
+
if initialize_states:
|
| 500 |
+
conv_state.zero_()
|
| 501 |
+
ssm_state.zero_()
|
| 502 |
+
return conv_state, ssm_state
|
build/torch213-cxx11-cu126-x86_64-linux/modules/mamba2_simple.py
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Tri Dao, Albert Gu.
|
| 2 |
+
|
| 3 |
+
import math
|
| 4 |
+
import torch
|
| 5 |
+
import torch.nn as nn
|
| 6 |
+
import torch.nn.functional as F
|
| 7 |
+
|
| 8 |
+
from einops import rearrange, repeat
|
| 9 |
+
|
| 10 |
+
try:
|
| 11 |
+
from causal_conv1d import causal_conv1d_fn
|
| 12 |
+
except ImportError:
|
| 13 |
+
causal_conv1d_fn = None
|
| 14 |
+
|
| 15 |
+
try:
|
| 16 |
+
from ..ops.triton.layernorm_gated import RMSNorm as RMSNormGated, LayerNorm
|
| 17 |
+
except ImportError:
|
| 18 |
+
RMSNormGated, LayerNorm = None, None
|
| 19 |
+
|
| 20 |
+
from ..ops.triton.ssd_combined import mamba_chunk_scan_combined
|
| 21 |
+
from ..ops.triton.ssd_combined import mamba_split_conv1d_scan_combined
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
class Mamba2Simple(nn.Module):
|
| 25 |
+
def __init__(
|
| 26 |
+
self,
|
| 27 |
+
d_model,
|
| 28 |
+
d_state=64,
|
| 29 |
+
d_conv=4,
|
| 30 |
+
conv_init=None,
|
| 31 |
+
expand=2,
|
| 32 |
+
headdim=128,
|
| 33 |
+
ngroups=1,
|
| 34 |
+
A_init_range=(1, 16),
|
| 35 |
+
dt_min=0.001,
|
| 36 |
+
dt_max=0.1,
|
| 37 |
+
dt_init_floor=1e-4,
|
| 38 |
+
dt_limit=(0.0, float("inf")),
|
| 39 |
+
learnable_init_states=False,
|
| 40 |
+
activation="swish",
|
| 41 |
+
bias=False,
|
| 42 |
+
conv_bias=True,
|
| 43 |
+
# Fused kernel and sharding options
|
| 44 |
+
chunk_size=256,
|
| 45 |
+
use_mem_eff_path=True,
|
| 46 |
+
layer_idx=None, # Absorb kwarg for general module
|
| 47 |
+
device=None,
|
| 48 |
+
dtype=None,
|
| 49 |
+
):
|
| 50 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 51 |
+
super().__init__()
|
| 52 |
+
self.d_model = d_model
|
| 53 |
+
self.d_state = d_state
|
| 54 |
+
self.d_conv = d_conv
|
| 55 |
+
self.conv_init = conv_init
|
| 56 |
+
self.expand = expand
|
| 57 |
+
self.d_inner = self.expand * self.d_model
|
| 58 |
+
self.headdim = headdim
|
| 59 |
+
self.ngroups = ngroups
|
| 60 |
+
assert self.d_inner % self.headdim == 0
|
| 61 |
+
self.nheads = self.d_inner // self.headdim
|
| 62 |
+
self.dt_limit = dt_limit
|
| 63 |
+
self.learnable_init_states = learnable_init_states
|
| 64 |
+
self.activation = activation
|
| 65 |
+
self.chunk_size = chunk_size
|
| 66 |
+
self.use_mem_eff_path = use_mem_eff_path
|
| 67 |
+
self.layer_idx = layer_idx
|
| 68 |
+
|
| 69 |
+
# Order: [z, x, B, C, dt]
|
| 70 |
+
d_in_proj = 2 * self.d_inner + 2 * self.ngroups * self.d_state + self.nheads
|
| 71 |
+
self.in_proj = nn.Linear(self.d_model, d_in_proj, bias=bias, **factory_kwargs)
|
| 72 |
+
|
| 73 |
+
conv_dim = self.d_inner + 2 * self.ngroups * self.d_state
|
| 74 |
+
self.conv1d = nn.Conv1d(
|
| 75 |
+
in_channels=conv_dim,
|
| 76 |
+
out_channels=conv_dim,
|
| 77 |
+
bias=conv_bias,
|
| 78 |
+
kernel_size=d_conv,
|
| 79 |
+
groups=conv_dim,
|
| 80 |
+
padding=d_conv - 1,
|
| 81 |
+
**factory_kwargs,
|
| 82 |
+
)
|
| 83 |
+
if self.conv_init is not None:
|
| 84 |
+
nn.init.uniform_(self.conv1d.weight, -self.conv_init, self.conv_init)
|
| 85 |
+
# self.conv1d.weight._no_weight_decay = True
|
| 86 |
+
|
| 87 |
+
if self.learnable_init_states:
|
| 88 |
+
self.init_states = nn.Parameter(
|
| 89 |
+
torch.zeros(self.nheads, self.headdim, self.d_state, **factory_kwargs)
|
| 90 |
+
)
|
| 91 |
+
self.init_states._no_weight_decay = True
|
| 92 |
+
|
| 93 |
+
self.act = nn.SiLU()
|
| 94 |
+
|
| 95 |
+
# Initialize log dt bias
|
| 96 |
+
dt = torch.exp(
|
| 97 |
+
torch.rand(self.nheads, **factory_kwargs)
|
| 98 |
+
* (math.log(dt_max) - math.log(dt_min))
|
| 99 |
+
+ math.log(dt_min)
|
| 100 |
+
)
|
| 101 |
+
dt = torch.clamp(dt, min=dt_init_floor)
|
| 102 |
+
# Inverse of softplus: https://github.com/pytorch/pytorch/issues/72759
|
| 103 |
+
inv_dt = dt + torch.log(-torch.expm1(-dt))
|
| 104 |
+
self.dt_bias = nn.Parameter(inv_dt)
|
| 105 |
+
# Just to be explicit. Without this we already don't put wd on dt_bias because of the check
|
| 106 |
+
# name.endswith("bias") in param_grouping.py
|
| 107 |
+
self.dt_bias._no_weight_decay = True
|
| 108 |
+
|
| 109 |
+
# A parameter
|
| 110 |
+
assert A_init_range[0] > 0 and A_init_range[1] >= A_init_range[0]
|
| 111 |
+
A = torch.empty(self.nheads, dtype=torch.float32, device=device).uniform_(
|
| 112 |
+
*A_init_range
|
| 113 |
+
)
|
| 114 |
+
A_log = torch.log(A).to(dtype=dtype)
|
| 115 |
+
self.A_log = nn.Parameter(A_log)
|
| 116 |
+
# self.register_buffer("A_log", torch.zeros(self.nheads, dtype=torch.float32, device=device), persistent=True)
|
| 117 |
+
self.A_log._no_weight_decay = True
|
| 118 |
+
|
| 119 |
+
# D "skip" parameter
|
| 120 |
+
self.D = nn.Parameter(torch.ones(self.nheads, device=device))
|
| 121 |
+
self.D._no_weight_decay = True
|
| 122 |
+
|
| 123 |
+
# Extra normalization layer right before output projection
|
| 124 |
+
assert RMSNormGated is not None
|
| 125 |
+
self.norm = RMSNormGated(
|
| 126 |
+
self.d_inner, eps=1e-5, norm_before_gate=False, **factory_kwargs
|
| 127 |
+
)
|
| 128 |
+
|
| 129 |
+
self.out_proj = nn.Linear(
|
| 130 |
+
self.d_inner, self.d_model, bias=bias, **factory_kwargs
|
| 131 |
+
)
|
| 132 |
+
|
| 133 |
+
def forward(self, u, seq_idx=None):
|
| 134 |
+
"""
|
| 135 |
+
u: (B, L, D)
|
| 136 |
+
Returns: same shape as u
|
| 137 |
+
"""
|
| 138 |
+
batch, seqlen, dim = u.shape
|
| 139 |
+
|
| 140 |
+
zxbcdt = self.in_proj(u) # (B, L, d_in_proj)
|
| 141 |
+
A = -torch.exp(self.A_log) # (nheads) or (d_inner, d_state)
|
| 142 |
+
initial_states = (
|
| 143 |
+
repeat(self.init_states, "... -> b ...", b=batch)
|
| 144 |
+
if self.learnable_init_states
|
| 145 |
+
else None
|
| 146 |
+
)
|
| 147 |
+
dt_limit_kwargs = (
|
| 148 |
+
{} if self.dt_limit == (0.0, float("inf")) else dict(dt_limit=self.dt_limit)
|
| 149 |
+
)
|
| 150 |
+
|
| 151 |
+
if self.use_mem_eff_path:
|
| 152 |
+
# Fully fused path
|
| 153 |
+
out = mamba_split_conv1d_scan_combined(
|
| 154 |
+
zxbcdt,
|
| 155 |
+
rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 156 |
+
self.conv1d.bias,
|
| 157 |
+
self.dt_bias,
|
| 158 |
+
A,
|
| 159 |
+
D=self.D,
|
| 160 |
+
chunk_size=self.chunk_size,
|
| 161 |
+
seq_idx=seq_idx,
|
| 162 |
+
activation=self.activation,
|
| 163 |
+
rmsnorm_weight=self.norm.weight,
|
| 164 |
+
rmsnorm_eps=self.norm.eps,
|
| 165 |
+
outproj_weight=self.out_proj.weight,
|
| 166 |
+
outproj_bias=self.out_proj.bias,
|
| 167 |
+
headdim=self.headdim,
|
| 168 |
+
ngroups=self.ngroups,
|
| 169 |
+
norm_before_gate=False,
|
| 170 |
+
initial_states=initial_states,
|
| 171 |
+
**dt_limit_kwargs,
|
| 172 |
+
)
|
| 173 |
+
else:
|
| 174 |
+
z, xBC, dt = torch.split(
|
| 175 |
+
zxbcdt,
|
| 176 |
+
[
|
| 177 |
+
self.d_inner,
|
| 178 |
+
self.d_inner + 2 * self.ngroups * self.d_state,
|
| 179 |
+
self.nheads,
|
| 180 |
+
],
|
| 181 |
+
dim=-1,
|
| 182 |
+
)
|
| 183 |
+
dt = F.softplus(dt + self.dt_bias) # (B, L, nheads)
|
| 184 |
+
assert self.activation in ["silu", "swish"]
|
| 185 |
+
|
| 186 |
+
# 1D Convolution
|
| 187 |
+
if causal_conv1d_fn is None or self.activation not in ["silu", "swish"]:
|
| 188 |
+
xBC = self.act(
|
| 189 |
+
self.conv1d(xBC.transpose(1, 2)).transpose(1, 2)
|
| 190 |
+
) # (B, L, self.d_inner + 2 * ngroups * d_state)
|
| 191 |
+
xBC = xBC[:, :seqlen, :]
|
| 192 |
+
else:
|
| 193 |
+
xBC = causal_conv1d_fn(
|
| 194 |
+
x=xBC.transpose(1, 2),
|
| 195 |
+
weight=rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 196 |
+
bias=self.conv1d.bias,
|
| 197 |
+
activation=self.activation,
|
| 198 |
+
).transpose(1, 2)
|
| 199 |
+
|
| 200 |
+
# Split into 3 main branches: X, B, C
|
| 201 |
+
# These correspond to V, K, Q respectively in the SSM/attention duality
|
| 202 |
+
x, B, C = torch.split(
|
| 203 |
+
xBC,
|
| 204 |
+
[
|
| 205 |
+
self.d_inner,
|
| 206 |
+
self.ngroups * self.d_state,
|
| 207 |
+
self.ngroups * self.d_state,
|
| 208 |
+
],
|
| 209 |
+
dim=-1,
|
| 210 |
+
)
|
| 211 |
+
y = mamba_chunk_scan_combined(
|
| 212 |
+
rearrange(x, "b l (h p) -> b l h p", p=self.headdim),
|
| 213 |
+
dt,
|
| 214 |
+
A,
|
| 215 |
+
rearrange(B, "b l (g n) -> b l g n", g=self.ngroups),
|
| 216 |
+
rearrange(C, "b l (g n) -> b l g n", g=self.ngroups),
|
| 217 |
+
chunk_size=self.chunk_size,
|
| 218 |
+
D=self.D,
|
| 219 |
+
z=None,
|
| 220 |
+
seq_idx=seq_idx,
|
| 221 |
+
initial_states=initial_states,
|
| 222 |
+
**dt_limit_kwargs,
|
| 223 |
+
)
|
| 224 |
+
y = rearrange(y, "b l h p -> b l (h p)")
|
| 225 |
+
|
| 226 |
+
# Multiply "gate" branch and apply extra normalization layer
|
| 227 |
+
y = self.norm(y, z)
|
| 228 |
+
out = self.out_proj(y)
|
| 229 |
+
return out
|
build/torch213-cxx11-cu126-x86_64-linux/modules/mamba_simple.py
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2023, Tri Dao, Albert Gu.
|
| 2 |
+
|
| 3 |
+
import math
|
| 4 |
+
from typing import Optional
|
| 5 |
+
|
| 6 |
+
import torch
|
| 7 |
+
import torch.nn as nn
|
| 8 |
+
import torch.nn.functional as F
|
| 9 |
+
from torch import Tensor
|
| 10 |
+
|
| 11 |
+
from einops import rearrange, repeat
|
| 12 |
+
|
| 13 |
+
from ..ops.selective_scan_interface import selective_scan_fn, mamba_inner_fn
|
| 14 |
+
|
| 15 |
+
try:
|
| 16 |
+
from causal_conv1d import causal_conv1d_fn, causal_conv1d_update
|
| 17 |
+
except ImportError:
|
| 18 |
+
causal_conv1d_fn, causal_conv1d_update = None, None
|
| 19 |
+
|
| 20 |
+
try:
|
| 21 |
+
from ..ops.triton.selective_state_update import selective_state_update
|
| 22 |
+
except ImportError:
|
| 23 |
+
selective_state_update = None
|
| 24 |
+
|
| 25 |
+
try:
|
| 26 |
+
from ..ops.triton.layer_norm import RMSNorm, layer_norm_fn, rms_norm_fn
|
| 27 |
+
except ImportError:
|
| 28 |
+
RMSNorm, layer_norm_fn, rms_norm_fn = None, None, None
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
class Mamba(nn.Module):
|
| 32 |
+
def __init__(
|
| 33 |
+
self,
|
| 34 |
+
d_model,
|
| 35 |
+
d_state=16,
|
| 36 |
+
d_conv=4,
|
| 37 |
+
expand=2,
|
| 38 |
+
dt_rank="auto",
|
| 39 |
+
dt_min=0.001,
|
| 40 |
+
dt_max=0.1,
|
| 41 |
+
dt_init="random",
|
| 42 |
+
dt_scale=1.0,
|
| 43 |
+
dt_init_floor=1e-4,
|
| 44 |
+
conv_bias=True,
|
| 45 |
+
bias=False,
|
| 46 |
+
use_fast_path=True, # Fused kernel options
|
| 47 |
+
layer_idx=None,
|
| 48 |
+
device=None,
|
| 49 |
+
dtype=None,
|
| 50 |
+
):
|
| 51 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 52 |
+
super().__init__()
|
| 53 |
+
self.d_model = d_model
|
| 54 |
+
self.d_state = d_state
|
| 55 |
+
self.d_conv = d_conv
|
| 56 |
+
self.expand = expand
|
| 57 |
+
self.d_inner = int(self.expand * self.d_model)
|
| 58 |
+
self.dt_rank = math.ceil(self.d_model / 16) if dt_rank == "auto" else dt_rank
|
| 59 |
+
self.use_fast_path = use_fast_path
|
| 60 |
+
self.layer_idx = layer_idx
|
| 61 |
+
|
| 62 |
+
self.in_proj = nn.Linear(
|
| 63 |
+
self.d_model, self.d_inner * 2, bias=bias, **factory_kwargs
|
| 64 |
+
)
|
| 65 |
+
|
| 66 |
+
self.conv1d = nn.Conv1d(
|
| 67 |
+
in_channels=self.d_inner,
|
| 68 |
+
out_channels=self.d_inner,
|
| 69 |
+
bias=conv_bias,
|
| 70 |
+
kernel_size=d_conv,
|
| 71 |
+
groups=self.d_inner,
|
| 72 |
+
padding=d_conv - 1,
|
| 73 |
+
**factory_kwargs,
|
| 74 |
+
)
|
| 75 |
+
|
| 76 |
+
self.activation = "silu"
|
| 77 |
+
self.act = nn.SiLU()
|
| 78 |
+
|
| 79 |
+
self.x_proj = nn.Linear(
|
| 80 |
+
self.d_inner, self.dt_rank + self.d_state * 2, bias=False, **factory_kwargs
|
| 81 |
+
)
|
| 82 |
+
self.dt_proj = nn.Linear(
|
| 83 |
+
self.dt_rank, self.d_inner, bias=True, **factory_kwargs
|
| 84 |
+
)
|
| 85 |
+
|
| 86 |
+
# Initialize special dt projection to preserve variance at initialization
|
| 87 |
+
dt_init_std = self.dt_rank**-0.5 * dt_scale
|
| 88 |
+
if dt_init == "constant":
|
| 89 |
+
nn.init.constant_(self.dt_proj.weight, dt_init_std)
|
| 90 |
+
elif dt_init == "random":
|
| 91 |
+
nn.init.uniform_(self.dt_proj.weight, -dt_init_std, dt_init_std)
|
| 92 |
+
else:
|
| 93 |
+
raise NotImplementedError
|
| 94 |
+
|
| 95 |
+
# Initialize dt bias so that F.softplus(dt_bias) is between dt_min and dt_max
|
| 96 |
+
dt = torch.exp(
|
| 97 |
+
torch.rand(self.d_inner, **factory_kwargs)
|
| 98 |
+
* (math.log(dt_max) - math.log(dt_min))
|
| 99 |
+
+ math.log(dt_min)
|
| 100 |
+
).clamp(min=dt_init_floor)
|
| 101 |
+
# Inverse of softplus: https://github.com/pytorch/pytorch/issues/72759
|
| 102 |
+
inv_dt = dt + torch.log(-torch.expm1(-dt))
|
| 103 |
+
with torch.no_grad():
|
| 104 |
+
self.dt_proj.bias.copy_(inv_dt)
|
| 105 |
+
# Our initialization would set all Linear.bias to zero, need to mark this one as _no_reinit
|
| 106 |
+
self.dt_proj.bias._no_reinit = True
|
| 107 |
+
|
| 108 |
+
# S4D real initialization
|
| 109 |
+
A = repeat(
|
| 110 |
+
torch.arange(1, self.d_state + 1, dtype=torch.float32, device=device),
|
| 111 |
+
"n -> d n",
|
| 112 |
+
d=self.d_inner,
|
| 113 |
+
).contiguous()
|
| 114 |
+
A_log = torch.log(A) # Keep A_log in fp32
|
| 115 |
+
self.A_log = nn.Parameter(A_log)
|
| 116 |
+
self.A_log._no_weight_decay = True
|
| 117 |
+
|
| 118 |
+
# D "skip" parameter
|
| 119 |
+
self.D = nn.Parameter(torch.ones(self.d_inner, device=device)) # Keep in fp32
|
| 120 |
+
self.D._no_weight_decay = True
|
| 121 |
+
|
| 122 |
+
self.out_proj = nn.Linear(
|
| 123 |
+
self.d_inner, self.d_model, bias=bias, **factory_kwargs
|
| 124 |
+
)
|
| 125 |
+
|
| 126 |
+
def forward(self, hidden_states, inference_params=None):
|
| 127 |
+
"""
|
| 128 |
+
hidden_states: (B, L, D)
|
| 129 |
+
Returns: same shape as hidden_states
|
| 130 |
+
"""
|
| 131 |
+
batch, seqlen, dim = hidden_states.shape
|
| 132 |
+
|
| 133 |
+
conv_state, ssm_state = None, None
|
| 134 |
+
if inference_params is not None:
|
| 135 |
+
conv_state, ssm_state = self._get_states_from_cache(inference_params, batch)
|
| 136 |
+
if inference_params.seqlen_offset > 0:
|
| 137 |
+
# The states are updated inplace
|
| 138 |
+
out, _, _ = self.step(hidden_states, conv_state, ssm_state)
|
| 139 |
+
return out
|
| 140 |
+
|
| 141 |
+
# We do matmul and transpose BLH -> HBL at the same time
|
| 142 |
+
xz = rearrange(
|
| 143 |
+
self.in_proj.weight @ rearrange(hidden_states, "b l d -> d (b l)"),
|
| 144 |
+
"d (b l) -> b d l",
|
| 145 |
+
l=seqlen,
|
| 146 |
+
)
|
| 147 |
+
if self.in_proj.bias is not None:
|
| 148 |
+
xz = xz + rearrange(self.in_proj.bias.to(dtype=xz.dtype), "d -> d 1")
|
| 149 |
+
|
| 150 |
+
A = -torch.exp(self.A_log.float()) # (d_inner, d_state)
|
| 151 |
+
# In the backward pass we write dx and dz next to each other to avoid torch.cat
|
| 152 |
+
if (
|
| 153 |
+
self.use_fast_path
|
| 154 |
+
and causal_conv1d_fn is not None
|
| 155 |
+
and inference_params is None
|
| 156 |
+
): # Doesn't support outputting the states
|
| 157 |
+
out = mamba_inner_fn(
|
| 158 |
+
xz,
|
| 159 |
+
self.conv1d.weight,
|
| 160 |
+
self.conv1d.bias,
|
| 161 |
+
self.x_proj.weight,
|
| 162 |
+
self.dt_proj.weight,
|
| 163 |
+
self.out_proj.weight,
|
| 164 |
+
self.out_proj.bias,
|
| 165 |
+
A,
|
| 166 |
+
None, # input-dependent B
|
| 167 |
+
None, # input-dependent C
|
| 168 |
+
self.D.float(),
|
| 169 |
+
delta_bias=self.dt_proj.bias.float(),
|
| 170 |
+
delta_softplus=True,
|
| 171 |
+
)
|
| 172 |
+
else:
|
| 173 |
+
x, z = xz.chunk(2, dim=1)
|
| 174 |
+
# Compute short convolution
|
| 175 |
+
if conv_state is not None:
|
| 176 |
+
# If we just take x[:, :, -self.d_conv :], it will error if seqlen < self.d_conv
|
| 177 |
+
# Instead F.pad will pad with zeros if seqlen < self.d_conv, and truncate otherwise.
|
| 178 |
+
conv_state.copy_(
|
| 179 |
+
F.pad(x, (self.d_conv - x.shape[-1], 0))
|
| 180 |
+
) # Update state (B D W)
|
| 181 |
+
if causal_conv1d_fn is None:
|
| 182 |
+
x = self.act(self.conv1d(x)[..., :seqlen])
|
| 183 |
+
else:
|
| 184 |
+
assert self.activation in ["silu", "swish"]
|
| 185 |
+
x = causal_conv1d_fn(
|
| 186 |
+
x=x,
|
| 187 |
+
weight=rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 188 |
+
bias=self.conv1d.bias,
|
| 189 |
+
activation=self.activation,
|
| 190 |
+
)
|
| 191 |
+
|
| 192 |
+
# We're careful here about the layout, to avoid extra transposes.
|
| 193 |
+
# We want dt to have d as the slowest moving dimension
|
| 194 |
+
# and L as the fastest moving dimension, since those are what the ssm_scan kernel expects.
|
| 195 |
+
x_dbl = self.x_proj(rearrange(x, "b d l -> (b l) d")) # (bl d)
|
| 196 |
+
dt, B, C = torch.split(
|
| 197 |
+
x_dbl, [self.dt_rank, self.d_state, self.d_state], dim=-1
|
| 198 |
+
)
|
| 199 |
+
dt = self.dt_proj.weight @ dt.t()
|
| 200 |
+
dt = rearrange(dt, "d (b l) -> b d l", l=seqlen)
|
| 201 |
+
B = rearrange(B, "(b l) dstate -> b dstate l", l=seqlen).contiguous()
|
| 202 |
+
C = rearrange(C, "(b l) dstate -> b dstate l", l=seqlen).contiguous()
|
| 203 |
+
assert self.activation in ["silu", "swish"]
|
| 204 |
+
y = selective_scan_fn(
|
| 205 |
+
x,
|
| 206 |
+
dt,
|
| 207 |
+
A,
|
| 208 |
+
B,
|
| 209 |
+
C,
|
| 210 |
+
self.D.float(),
|
| 211 |
+
z=z,
|
| 212 |
+
delta_bias=self.dt_proj.bias.float(),
|
| 213 |
+
delta_softplus=True,
|
| 214 |
+
return_last_state=ssm_state is not None,
|
| 215 |
+
)
|
| 216 |
+
if ssm_state is not None:
|
| 217 |
+
y, last_state = y
|
| 218 |
+
ssm_state.copy_(last_state)
|
| 219 |
+
y = rearrange(y, "b d l -> b l d")
|
| 220 |
+
out = self.out_proj(y)
|
| 221 |
+
return out
|
| 222 |
+
|
| 223 |
+
def step(self, hidden_states, conv_state, ssm_state):
|
| 224 |
+
dtype = hidden_states.dtype
|
| 225 |
+
assert (
|
| 226 |
+
hidden_states.shape[1] == 1
|
| 227 |
+
), "Only support decoding with 1 token at a time for now"
|
| 228 |
+
xz = self.in_proj(hidden_states.squeeze(1)) # (B 2D)
|
| 229 |
+
x, z = xz.chunk(2, dim=-1) # (B D)
|
| 230 |
+
|
| 231 |
+
# Conv step
|
| 232 |
+
if causal_conv1d_update is None:
|
| 233 |
+
conv_state.copy_(
|
| 234 |
+
torch.roll(conv_state, shifts=-1, dims=-1)
|
| 235 |
+
) # Update state (B D W)
|
| 236 |
+
conv_state[:, :, -1] = x
|
| 237 |
+
x = torch.sum(
|
| 238 |
+
conv_state * rearrange(self.conv1d.weight, "d 1 w -> d w"), dim=-1
|
| 239 |
+
) # (B D)
|
| 240 |
+
if self.conv1d.bias is not None:
|
| 241 |
+
x = x + self.conv1d.bias
|
| 242 |
+
x = self.act(x).to(dtype=dtype)
|
| 243 |
+
else:
|
| 244 |
+
x = causal_conv1d_update(
|
| 245 |
+
x,
|
| 246 |
+
conv_state,
|
| 247 |
+
rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 248 |
+
self.conv1d.bias,
|
| 249 |
+
self.activation,
|
| 250 |
+
)
|
| 251 |
+
|
| 252 |
+
x_db = self.x_proj(x) # (B dt_rank+2*d_state)
|
| 253 |
+
dt, B, C = torch.split(x_db, [self.dt_rank, self.d_state, self.d_state], dim=-1)
|
| 254 |
+
# Don't add dt_bias here
|
| 255 |
+
dt = F.linear(dt, self.dt_proj.weight) # (B d_inner)
|
| 256 |
+
A = -torch.exp(self.A_log.float()) # (d_inner, d_state)
|
| 257 |
+
|
| 258 |
+
# SSM step
|
| 259 |
+
if selective_state_update is None:
|
| 260 |
+
# Discretize A and B
|
| 261 |
+
dt = F.softplus(dt + self.dt_proj.bias.to(dtype=dt.dtype))
|
| 262 |
+
dA = torch.exp(torch.einsum("bd,dn->bdn", dt, A))
|
| 263 |
+
dB = torch.einsum("bd,bn->bdn", dt, B)
|
| 264 |
+
ssm_state.copy_(ssm_state * dA + rearrange(x, "b d -> b d 1") * dB)
|
| 265 |
+
y = torch.einsum("bdn,bn->bd", ssm_state.to(dtype), C)
|
| 266 |
+
y = y + self.D.to(dtype) * x
|
| 267 |
+
y = y * self.act(z) # (B D)
|
| 268 |
+
else:
|
| 269 |
+
y = selective_state_update(
|
| 270 |
+
ssm_state,
|
| 271 |
+
x,
|
| 272 |
+
dt,
|
| 273 |
+
A,
|
| 274 |
+
B,
|
| 275 |
+
C,
|
| 276 |
+
self.D,
|
| 277 |
+
z=z,
|
| 278 |
+
dt_bias=self.dt_proj.bias,
|
| 279 |
+
dt_softplus=True,
|
| 280 |
+
)
|
| 281 |
+
|
| 282 |
+
out = self.out_proj(y)
|
| 283 |
+
return out.unsqueeze(1), conv_state, ssm_state
|
| 284 |
+
|
| 285 |
+
def allocate_inference_cache(self, batch_size, max_seqlen, dtype=None, **kwargs):
|
| 286 |
+
device = self.out_proj.weight.device
|
| 287 |
+
conv_dtype = self.conv1d.weight.dtype if dtype is None else dtype
|
| 288 |
+
conv_state = torch.zeros(
|
| 289 |
+
batch_size,
|
| 290 |
+
self.d_model * self.expand,
|
| 291 |
+
self.d_conv,
|
| 292 |
+
device=device,
|
| 293 |
+
dtype=conv_dtype,
|
| 294 |
+
)
|
| 295 |
+
ssm_dtype = self.dt_proj.weight.dtype if dtype is None else dtype
|
| 296 |
+
# ssm_dtype = torch.float32
|
| 297 |
+
ssm_state = torch.zeros(
|
| 298 |
+
batch_size,
|
| 299 |
+
self.d_model * self.expand,
|
| 300 |
+
self.d_state,
|
| 301 |
+
device=device,
|
| 302 |
+
dtype=ssm_dtype,
|
| 303 |
+
)
|
| 304 |
+
return conv_state, ssm_state
|
| 305 |
+
|
| 306 |
+
def _get_states_from_cache(
|
| 307 |
+
self, inference_params, batch_size, initialize_states=False
|
| 308 |
+
):
|
| 309 |
+
assert self.layer_idx is not None
|
| 310 |
+
if self.layer_idx not in inference_params.key_value_memory_dict:
|
| 311 |
+
batch_shape = (batch_size,)
|
| 312 |
+
conv_state = torch.zeros(
|
| 313 |
+
batch_size,
|
| 314 |
+
self.d_model * self.expand,
|
| 315 |
+
self.d_conv,
|
| 316 |
+
device=self.conv1d.weight.device,
|
| 317 |
+
dtype=self.conv1d.weight.dtype,
|
| 318 |
+
)
|
| 319 |
+
ssm_state = torch.zeros(
|
| 320 |
+
batch_size,
|
| 321 |
+
self.d_model * self.expand,
|
| 322 |
+
self.d_state,
|
| 323 |
+
device=self.dt_proj.weight.device,
|
| 324 |
+
dtype=self.dt_proj.weight.dtype,
|
| 325 |
+
# dtype=torch.float32,
|
| 326 |
+
)
|
| 327 |
+
inference_params.key_value_memory_dict[self.layer_idx] = (
|
| 328 |
+
conv_state,
|
| 329 |
+
ssm_state,
|
| 330 |
+
)
|
| 331 |
+
else:
|
| 332 |
+
conv_state, ssm_state = inference_params.key_value_memory_dict[
|
| 333 |
+
self.layer_idx
|
| 334 |
+
]
|
| 335 |
+
# TODO: What if batch size changes between generation, and we reuse the same states?
|
| 336 |
+
if initialize_states:
|
| 337 |
+
conv_state.zero_()
|
| 338 |
+
ssm_state.zero_()
|
| 339 |
+
return conv_state, ssm_state
|
build/torch213-cxx11-cu126-x86_64-linux/modules/mha.py
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Tri Dao, Albert Gu.
|
| 2 |
+
|
| 3 |
+
import math
|
| 4 |
+
|
| 5 |
+
import torch
|
| 6 |
+
import torch.nn as nn
|
| 7 |
+
import torch.nn.functional as F
|
| 8 |
+
from einops import rearrange
|
| 9 |
+
|
| 10 |
+
try:
|
| 11 |
+
from flash_attn import flash_attn_with_kvcache
|
| 12 |
+
except ImportError:
|
| 13 |
+
flash_attn_with_kvcache = None
|
| 14 |
+
|
| 15 |
+
try:
|
| 16 |
+
from flash_attn.layers.rotary import RotaryEmbedding
|
| 17 |
+
except ImportError:
|
| 18 |
+
RotaryEmbedding = None
|
| 19 |
+
|
| 20 |
+
try:
|
| 21 |
+
from causal_conv1d import causal_conv1d_fn, causal_conv1d_update
|
| 22 |
+
except ImportError:
|
| 23 |
+
causal_conv1d_fn, causal_conv1d_update = None, None
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
def _update_kv_cache(kv, inference_params, layer_idx):
|
| 27 |
+
"""kv: (batch_size, seqlen, 2, nheads, head_dim) or (batch_size, 1, 2, nheads, head_dim)"""
|
| 28 |
+
# Pre-allocate memory for key-values for inference.
|
| 29 |
+
num_heads, head_dim = kv.shape[-2:]
|
| 30 |
+
assert layer_idx in inference_params.key_value_memory_dict
|
| 31 |
+
kv_cache, _ = inference_params.key_value_memory_dict[layer_idx]
|
| 32 |
+
# Adjust key and value for inference
|
| 33 |
+
batch_start = inference_params.batch_size_offset
|
| 34 |
+
batch_end = batch_start + kv.shape[0]
|
| 35 |
+
sequence_start = inference_params.seqlen_offset
|
| 36 |
+
sequence_end = sequence_start + kv.shape[1]
|
| 37 |
+
assert batch_end <= kv_cache.shape[0]
|
| 38 |
+
assert sequence_end <= kv_cache.shape[1]
|
| 39 |
+
assert kv_cache is not None
|
| 40 |
+
kv_cache[batch_start:batch_end, sequence_start:sequence_end, ...] = kv
|
| 41 |
+
return kv_cache[batch_start:batch_end, :sequence_end, ...]
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
class MHA(nn.Module):
|
| 45 |
+
"""Multi-head self-attention and cross-attention"""
|
| 46 |
+
|
| 47 |
+
def __init__(
|
| 48 |
+
self,
|
| 49 |
+
embed_dim,
|
| 50 |
+
num_heads,
|
| 51 |
+
num_heads_kv=None,
|
| 52 |
+
head_dim=None, # If None, use embed_dim // num_heads
|
| 53 |
+
mlp_dim=0,
|
| 54 |
+
qkv_proj_bias=True,
|
| 55 |
+
out_proj_bias=True,
|
| 56 |
+
softmax_scale=None,
|
| 57 |
+
causal=False,
|
| 58 |
+
layer_idx=None,
|
| 59 |
+
d_conv=0,
|
| 60 |
+
rotary_emb_dim=0,
|
| 61 |
+
rotary_emb_base=10000.0,
|
| 62 |
+
rotary_emb_interleaved=False,
|
| 63 |
+
device=None,
|
| 64 |
+
dtype=None,
|
| 65 |
+
) -> None:
|
| 66 |
+
"""
|
| 67 |
+
num_heads_kv: can be used to toggle MQA / GQA. If None, use num_heads.
|
| 68 |
+
return_residual: whether to return the input x along with the output. This is for
|
| 69 |
+
performance reason: for post-norm architecture, returning the input allows us
|
| 70 |
+
to fuse the backward of nn.Linear with the residual connection.
|
| 71 |
+
"""
|
| 72 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 73 |
+
super().__init__()
|
| 74 |
+
self.embed_dim = embed_dim
|
| 75 |
+
self.layer_idx = layer_idx
|
| 76 |
+
self.d_conv = d_conv
|
| 77 |
+
self.rotary_emb_dim = rotary_emb_dim
|
| 78 |
+
self.softmax_scale = softmax_scale
|
| 79 |
+
self.causal = causal
|
| 80 |
+
|
| 81 |
+
self.num_heads = num_heads
|
| 82 |
+
self.num_heads_kv = num_heads_kv if num_heads_kv is not None else num_heads
|
| 83 |
+
assert (
|
| 84 |
+
self.num_heads % self.num_heads_kv == 0
|
| 85 |
+
), "num_heads must be divisible by num_heads_kv"
|
| 86 |
+
if head_dim is None:
|
| 87 |
+
assert self.embed_dim % num_heads == 0, "embed_dim must be divisible by num_heads"
|
| 88 |
+
self.head_dim = head_dim if head_dim is not None else self.embed_dim // num_heads
|
| 89 |
+
self.mlp_dim = math.ceil(mlp_dim / 256) * 256
|
| 90 |
+
qkv_dim = self.head_dim * (self.num_heads + 2 * self.num_heads_kv)
|
| 91 |
+
out_dim = self.head_dim * self.num_heads
|
| 92 |
+
|
| 93 |
+
if self.rotary_emb_dim > 0:
|
| 94 |
+
assert RotaryEmbedding is not None, "rotary requires flash_attn to be installed"
|
| 95 |
+
self.rotary_emb = RotaryEmbedding(
|
| 96 |
+
self.rotary_emb_dim,
|
| 97 |
+
base=rotary_emb_base,
|
| 98 |
+
interleaved=rotary_emb_interleaved,
|
| 99 |
+
device=device,
|
| 100 |
+
)
|
| 101 |
+
|
| 102 |
+
self.in_proj = nn.Linear(embed_dim, qkv_dim + self.mlp_dim, bias=qkv_proj_bias, **factory_kwargs)
|
| 103 |
+
if self.d_conv > 0:
|
| 104 |
+
self.conv1d = nn.Conv1d(
|
| 105 |
+
qkv_dim, qkv_dim, kernel_size=self.d_conv, padding=self.d_conv - 1, groups=qkv_dim,
|
| 106 |
+
**factory_kwargs
|
| 107 |
+
)
|
| 108 |
+
self.out_proj = nn.Linear(out_dim + self.mlp_dim // 2, embed_dim, bias=out_proj_bias, **factory_kwargs)
|
| 109 |
+
|
| 110 |
+
def allocate_inference_cache(self, batch_size, max_seqlen, dtype=None):
|
| 111 |
+
dtype = self.out_proj.weight.dtype if dtype is None else dtype
|
| 112 |
+
device = self.out_proj.weight.device
|
| 113 |
+
if self.d_conv > 0:
|
| 114 |
+
conv_state = torch.zeros(
|
| 115 |
+
batch_size, self.conv1d.weight.shape[0], self.d_conv, device=device, dtype=dtype
|
| 116 |
+
)
|
| 117 |
+
else:
|
| 118 |
+
conv_state = None
|
| 119 |
+
kv_cache = torch.empty(
|
| 120 |
+
batch_size, max_seqlen, 2, self.num_heads_kv, self.head_dim, dtype=dtype, device=device,
|
| 121 |
+
)
|
| 122 |
+
return kv_cache, conv_state
|
| 123 |
+
|
| 124 |
+
def _update_kv_cache(self, kv, inference_params):
|
| 125 |
+
"""kv: (batch_size, seqlen, 2, nheads, head_dim) or (batch_size, 1, 2, nheads, head_dim)"""
|
| 126 |
+
assert self.layer_idx is not None, "Generation requires layer_idx in the constructor"
|
| 127 |
+
return _update_kv_cache(kv, inference_params, self.layer_idx)
|
| 128 |
+
|
| 129 |
+
def _apply_rotary_update_kvcache_attention(self, q, kv, inference_params):
|
| 130 |
+
"""
|
| 131 |
+
Fast path that combine 3 steps: apply rotary to Q and K, update kv cache, and apply attention.
|
| 132 |
+
q: (batch_size, seqlen_q, nheads, head_dim)
|
| 133 |
+
kv: (batch_size, seqlen_k, 2, nheads_kv, head_dim)
|
| 134 |
+
"""
|
| 135 |
+
assert inference_params is not None and inference_params.seqlen_offset > 0
|
| 136 |
+
if self.rotary_emb_dim > 0:
|
| 137 |
+
self.rotary_emb._update_cos_sin_cache(
|
| 138 |
+
inference_params.max_seqlen, device=q.device, dtype=q.dtype
|
| 139 |
+
)
|
| 140 |
+
rotary_cos, rotary_sin = self.rotary_emb._cos_cached, self.rotary_emb._sin_cached
|
| 141 |
+
else:
|
| 142 |
+
rotary_cos, rotary_sin = None, None
|
| 143 |
+
batch = q.shape[0]
|
| 144 |
+
kv_cache, _ = inference_params.key_value_memory_dict[self.layer_idx]
|
| 145 |
+
kv_cache = kv_cache[:batch]
|
| 146 |
+
cache_seqlens = (
|
| 147 |
+
inference_params.lengths_per_sample[:batch]
|
| 148 |
+
if inference_params.lengths_per_sample is not None
|
| 149 |
+
else inference_params.seqlen_offset
|
| 150 |
+
)
|
| 151 |
+
assert flash_attn_with_kvcache is not None, "flash_attn must be installed"
|
| 152 |
+
context = flash_attn_with_kvcache(
|
| 153 |
+
q,
|
| 154 |
+
kv_cache[:, :, 0],
|
| 155 |
+
kv_cache[:, :, 1],
|
| 156 |
+
kv[:, :, 0],
|
| 157 |
+
kv[:, :, 1],
|
| 158 |
+
rotary_cos=rotary_cos,
|
| 159 |
+
rotary_sin=rotary_sin,
|
| 160 |
+
cache_seqlens=cache_seqlens,
|
| 161 |
+
softmax_scale=self.softmax_scale,
|
| 162 |
+
causal=self.causal,
|
| 163 |
+
rotary_interleaved=self.rotary_emb.interleaved if self.rotary_emb_dim > 0 else False,
|
| 164 |
+
)
|
| 165 |
+
return context
|
| 166 |
+
|
| 167 |
+
def _update_kvcache_attention(self, q, kv, inference_params):
|
| 168 |
+
"""Write kv to inference_params, then do attention"""
|
| 169 |
+
if (
|
| 170 |
+
inference_params.seqlen_offset == 0
|
| 171 |
+
or flash_attn_with_kvcache is None
|
| 172 |
+
):
|
| 173 |
+
# TODO: this only uses seqlen_offset and not lengths_per_sample.
|
| 174 |
+
kv = self._update_kv_cache(kv, inference_params)
|
| 175 |
+
k, v = kv.unbind(dim=-3)
|
| 176 |
+
k = torch.repeat_interleave(k, dim=2, repeats=self.num_heads // self.num_heads_kv)
|
| 177 |
+
v = torch.repeat_interleave(v, dim=2, repeats=self.num_heads // self.num_heads_kv)
|
| 178 |
+
return F.scaled_dot_product_attention(
|
| 179 |
+
q.transpose(1, 2), k.transpose(1, 2), v.transpose(1, 2), is_causal=self.causal, scale=self.softmax_scale
|
| 180 |
+
).transpose(1, 2)
|
| 181 |
+
else:
|
| 182 |
+
batch = q.shape[0]
|
| 183 |
+
kv_cache, _ = inference_params.key_value_memory_dict[self.layer_idx]
|
| 184 |
+
kv_cache = kv_cache[:batch]
|
| 185 |
+
cache_seqlens = (
|
| 186 |
+
inference_params.lengths_per_sample[:batch]
|
| 187 |
+
if inference_params.lengths_per_sample is not None
|
| 188 |
+
else inference_params.seqlen_offset
|
| 189 |
+
)
|
| 190 |
+
return flash_attn_with_kvcache(
|
| 191 |
+
q,
|
| 192 |
+
kv_cache[:, :, 0],
|
| 193 |
+
kv_cache[:, :, 1],
|
| 194 |
+
kv[:, :, 0],
|
| 195 |
+
kv[:, :, 1],
|
| 196 |
+
cache_seqlens=cache_seqlens,
|
| 197 |
+
softmax_scale=self.softmax_scale,
|
| 198 |
+
causal=self.causal,
|
| 199 |
+
)
|
| 200 |
+
|
| 201 |
+
def forward(self, x, inference_params=None):
|
| 202 |
+
"""
|
| 203 |
+
Arguments:
|
| 204 |
+
x: (batch, seqlen, hidden_dim) (where hidden_dim = num heads * head dim) if
|
| 205 |
+
cu_seqlens is None and max_seqlen is None, else (total, hidden_dim) where total
|
| 206 |
+
is the is the sum of the sequence lengths in the batch.
|
| 207 |
+
inference_params: for generation. Adapted from Megatron-LM (and Apex)
|
| 208 |
+
https://github.com/NVIDIA/apex/blob/3ff1a10f72ec07067c4e44759442329804ac5162/apex/transformer/testing/standalone_transformer_lm.py#L470
|
| 209 |
+
"""
|
| 210 |
+
if inference_params is not None and self.layer_idx not in inference_params.key_value_memory_dict:
|
| 211 |
+
inference_params.key_value_memory_dict[self.layer_idx] = self.allocate_inference_cache(
|
| 212 |
+
x.shape[0], inference_params.max_seqlen, dtype=x.dtype
|
| 213 |
+
)
|
| 214 |
+
seqlen_offset = (
|
| 215 |
+
0
|
| 216 |
+
if inference_params is None
|
| 217 |
+
else (
|
| 218 |
+
inference_params.lengths_per_sample
|
| 219 |
+
if inference_params.lengths_per_sample is not None
|
| 220 |
+
else inference_params.seqlen_offset
|
| 221 |
+
)
|
| 222 |
+
)
|
| 223 |
+
rotary_max_seqlen = inference_params.max_seqlen if inference_params is not None else None
|
| 224 |
+
qkv = self.in_proj(x)
|
| 225 |
+
if self.mlp_dim > 0:
|
| 226 |
+
qkv, x_mlp = qkv.split([qkv.shape[-1] - self.mlp_dim, self.mlp_dim], dim=-1)
|
| 227 |
+
x_mlp_up, x_mlp_gate = x_mlp.chunk(2, dim=-1)
|
| 228 |
+
x_mlp = x_mlp_up * F.silu(x_mlp_gate)
|
| 229 |
+
if self.d_conv > 0:
|
| 230 |
+
# The inference code for conv1d is pretty messy, should clean it up
|
| 231 |
+
if (inference_params is None or inference_params.seqlen_offset == 0):
|
| 232 |
+
if causal_conv1d_fn is None:
|
| 233 |
+
qkv = rearrange(
|
| 234 |
+
self.conv1d(rearrange(qkv, "b s d -> b d s"))[..., :-(self.d_conv - 1)], "b d s -> b s d"
|
| 235 |
+
).contiguous()
|
| 236 |
+
else:
|
| 237 |
+
qkv = causal_conv1d_fn(
|
| 238 |
+
qkv.transpose(1, 2),
|
| 239 |
+
rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 240 |
+
self.conv1d.bias
|
| 241 |
+
).transpose(1, 2)
|
| 242 |
+
if inference_params is not None:
|
| 243 |
+
_, conv_state = inference_params.key_value_memory_dict[self.layer_idx]
|
| 244 |
+
# If we just take qkv[:, :, -self.d_conv :], it will error if seqlen < self.d_conv
|
| 245 |
+
# Instead F.pad will pad with zeros if seqlen < self.d_conv, and truncate otherwise.
|
| 246 |
+
qkv_t = rearrange(qkv, "b l d -> b d l")
|
| 247 |
+
conv_state.copy_(F.pad(qkv_t, (self.d_conv - qkv_t.shape[-1], 0))) # Update state (B D W)
|
| 248 |
+
else:
|
| 249 |
+
_, conv_state = inference_params.key_value_memory_dict[self.layer_idx]
|
| 250 |
+
assert qkv.shape[1] == 1, "Only support decoding with 1 token at a time for now"
|
| 251 |
+
qkv = qkv.squeeze(1)
|
| 252 |
+
# Conv step
|
| 253 |
+
if causal_conv1d_update is None:
|
| 254 |
+
conv_state.copy_(torch.roll(conv_state, shifts=-1, dims=-1)) # Update state (B D W)
|
| 255 |
+
conv_state[:, :, -1] = qkv
|
| 256 |
+
qkv = torch.sum(conv_state * rearrange(self.conv1d.weight, "d 1 w -> d w"), dim=-1) # (B D)
|
| 257 |
+
if self.conv1d.bias is not None:
|
| 258 |
+
qkv = qkv + self.conv1d.bias
|
| 259 |
+
else:
|
| 260 |
+
qkv = causal_conv1d_update(
|
| 261 |
+
qkv,
|
| 262 |
+
conv_state,
|
| 263 |
+
rearrange(self.conv1d.weight, "d 1 w -> d w"),
|
| 264 |
+
self.conv1d.bias
|
| 265 |
+
)
|
| 266 |
+
qkv = qkv.unsqueeze(1)
|
| 267 |
+
q, kv = qkv.split([self.num_heads * self.head_dim, self.num_heads_kv * 2 * self.head_dim], dim=-1)
|
| 268 |
+
q = rearrange(q, "... (h d) -> ... h d", d=self.head_dim)
|
| 269 |
+
kv = rearrange(kv, "... (two hkv d) -> ... two hkv d", two=2, d=self.head_dim)
|
| 270 |
+
if (
|
| 271 |
+
inference_params is None
|
| 272 |
+
or inference_params.seqlen_offset == 0
|
| 273 |
+
or (self.rotary_emb_dim == 0 or self.rotary_emb_dim % 16 != 0)
|
| 274 |
+
):
|
| 275 |
+
if self.rotary_emb_dim > 0:
|
| 276 |
+
q, kv = self.rotary_emb(
|
| 277 |
+
q, kv, seqlen_offset=seqlen_offset, max_seqlen=rotary_max_seqlen
|
| 278 |
+
)
|
| 279 |
+
if inference_params is None:
|
| 280 |
+
k, v = kv.unbind(dim=-3)
|
| 281 |
+
k = torch.repeat_interleave(k, dim=2, repeats=self.num_heads // self.num_heads_kv)
|
| 282 |
+
v = torch.repeat_interleave(v, dim=2, repeats=self.num_heads // self.num_heads_kv)
|
| 283 |
+
context = F.scaled_dot_product_attention(
|
| 284 |
+
q.transpose(1, 2), k.transpose(1, 2), v.transpose(1, 2), is_causal=self.causal, scale=self.softmax_scale
|
| 285 |
+
).transpose(1, 2)
|
| 286 |
+
else:
|
| 287 |
+
context = self._update_kvcache_attention(q, kv, inference_params)
|
| 288 |
+
else:
|
| 289 |
+
context = self._apply_rotary_update_kvcache_attention(q, kv, inference_params)
|
| 290 |
+
context = rearrange(context, "... h d -> ... (h d)")
|
| 291 |
+
if self.mlp_dim > 0:
|
| 292 |
+
context = torch.cat([context, x_mlp], dim=-1)
|
| 293 |
+
out = self.out_proj(context)
|
| 294 |
+
return out
|
build/torch213-cxx11-cu126-x86_64-linux/modules/mlp.py
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Tri Dao, Albert Gu.
|
| 2 |
+
from torch import nn
|
| 3 |
+
from torch.nn import functional as F
|
| 4 |
+
|
| 5 |
+
|
| 6 |
+
class GatedMLP(nn.Module):
|
| 7 |
+
def __init__(
|
| 8 |
+
self,
|
| 9 |
+
in_features,
|
| 10 |
+
hidden_features=None,
|
| 11 |
+
out_features=None,
|
| 12 |
+
activation=F.silu,
|
| 13 |
+
bias=False,
|
| 14 |
+
multiple_of=128,
|
| 15 |
+
device=None,
|
| 16 |
+
dtype=None,
|
| 17 |
+
):
|
| 18 |
+
factory_kwargs = {"device": device, "dtype": dtype}
|
| 19 |
+
super().__init__()
|
| 20 |
+
out_features = out_features if out_features is not None else in_features
|
| 21 |
+
hidden_features = (
|
| 22 |
+
hidden_features if hidden_features is not None else int(8 * in_features / 3)
|
| 23 |
+
)
|
| 24 |
+
hidden_features = (hidden_features + multiple_of - 1) // multiple_of * multiple_of
|
| 25 |
+
self.fc1 = nn.Linear(in_features, 2 * hidden_features, bias=bias, **factory_kwargs)
|
| 26 |
+
self.activation = activation
|
| 27 |
+
self.fc2 = nn.Linear(hidden_features, out_features, bias=bias, **factory_kwargs)
|
| 28 |
+
|
| 29 |
+
def forward(self, x):
|
| 30 |
+
y = self.fc1(x)
|
| 31 |
+
y, gate = y.chunk(2, dim=-1)
|
| 32 |
+
y = y * self.activation(gate)
|
| 33 |
+
y = self.fc2(y)
|
| 34 |
+
return y
|
build/torch213-cxx11-cu126-x86_64-linux/modules/ssd_minimal.py
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Albert Gu and Tri Dao.
|
| 2 |
+
"""Minimal implementation of SSD.
|
| 3 |
+
|
| 4 |
+
This is the same as Listing 1 from the paper.
|
| 5 |
+
"""
|
| 6 |
+
|
| 7 |
+
import torch
|
| 8 |
+
import torch.nn.functional as F
|
| 9 |
+
from einops import rearrange, repeat
|
| 10 |
+
|
| 11 |
+
from ..ops.triton.ssd_combined import mamba_chunk_scan_combined
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
def segsum_unstable(x):
|
| 15 |
+
"""Naive segment sum calculation."""
|
| 16 |
+
T = x.size(-1)
|
| 17 |
+
x_cumsum = torch.cumsum(x, dim=-1)
|
| 18 |
+
x_segsum = x_cumsum[..., :, None] - x_cumsum[..., None, :]
|
| 19 |
+
mask = torch.tril(torch.ones(T, T, device=x.device, dtype=bool), diagonal=0)
|
| 20 |
+
x_segsum = x_segsum.masked_fill(~mask, -torch.inf)
|
| 21 |
+
return x_segsum
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def segsum(x):
|
| 25 |
+
"""More stable segment sum calculation."""
|
| 26 |
+
T = x.size(-1)
|
| 27 |
+
x = repeat(x, "... d -> ... d e", e=T)
|
| 28 |
+
mask = torch.tril(torch.ones(T, T, device=x.device, dtype=bool), diagonal=-1)
|
| 29 |
+
x = x.masked_fill(~mask, 0)
|
| 30 |
+
x_segsum = torch.cumsum(x, dim=-2)
|
| 31 |
+
mask = torch.tril(torch.ones(T, T, device=x.device, dtype=bool), diagonal=0)
|
| 32 |
+
x_segsum = x_segsum.masked_fill(~mask, -torch.inf)
|
| 33 |
+
return x_segsum
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def ssd_minimal_discrete(X, A, B, C, block_len, initial_states=None):
|
| 37 |
+
"""
|
| 38 |
+
Arguments:
|
| 39 |
+
X: (batch, length, n_heads, d_head)
|
| 40 |
+
A: (batch, length, n_heads)
|
| 41 |
+
B: (batch, length, n_heads, d_state)
|
| 42 |
+
C: (batch, length, n_heads, d_state)
|
| 43 |
+
Return:
|
| 44 |
+
Y: (batch, length, n_heads, d_head)
|
| 45 |
+
"""
|
| 46 |
+
assert X.dtype == A.dtype == B.dtype == C.dtype
|
| 47 |
+
assert X.shape[1] % block_len == 0
|
| 48 |
+
|
| 49 |
+
# Rearrange into blocks/chunks
|
| 50 |
+
X, A, B, C = [
|
| 51 |
+
rearrange(x, "b (c l) ... -> b c l ...", l=block_len) for x in (X, A, B, C)
|
| 52 |
+
]
|
| 53 |
+
|
| 54 |
+
A = rearrange(A, "b c l h -> b h c l")
|
| 55 |
+
A_cumsum = torch.cumsum(A, dim=-1)
|
| 56 |
+
|
| 57 |
+
# 1. Compute the output for each intra-chunk (diagonal blocks)
|
| 58 |
+
L = torch.exp(segsum(A))
|
| 59 |
+
Y_diag = torch.einsum("bclhn,bcshn,bhcls,bcshp->bclhp", C, B, L, X)
|
| 60 |
+
|
| 61 |
+
# 2. Compute the state for each intra-chunk
|
| 62 |
+
# (right term of low-rank factorization of off-diagonal blocks; B terms)
|
| 63 |
+
decay_states = torch.exp((A_cumsum[:, :, :, -1:] - A_cumsum))
|
| 64 |
+
states = torch.einsum("bclhn,bhcl,bclhp->bchpn", B, decay_states, X)
|
| 65 |
+
|
| 66 |
+
# 3. Compute the inter-chunk SSM recurrence; produces correct SSM states at chunk boundaries
|
| 67 |
+
# (middle term of factorization of off-diag blocks; A terms)
|
| 68 |
+
if initial_states is None:
|
| 69 |
+
initial_states = torch.zeros_like(states[:, :1])
|
| 70 |
+
states = torch.cat([initial_states, states], dim=1)
|
| 71 |
+
decay_chunk = torch.exp(segsum(F.pad(A_cumsum[:, :, :, -1], (1, 0))))
|
| 72 |
+
new_states = torch.einsum("bhzc,bchpn->bzhpn", decay_chunk, states)
|
| 73 |
+
states, final_state = new_states[:, :-1], new_states[:, -1]
|
| 74 |
+
|
| 75 |
+
# 4. Compute state -> output conversion per chunk
|
| 76 |
+
# (left term of low-rank factorization of off-diagonal blocks; C terms)
|
| 77 |
+
state_decay_out = torch.exp(A_cumsum)
|
| 78 |
+
Y_off = torch.einsum("bclhn,bchpn,bhcl->bclhp", C, states, state_decay_out)
|
| 79 |
+
|
| 80 |
+
# Add output of intra-chunk and inter-chunk terms (diagonal and off-diagonal blocks)
|
| 81 |
+
Y = rearrange(Y_diag + Y_off, "b c l h p -> b (c l) h p")
|
| 82 |
+
return Y, final_state
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
# Simple test
|
| 86 |
+
def test_correctness():
|
| 87 |
+
torch.manual_seed(42)
|
| 88 |
+
|
| 89 |
+
## Dimensions
|
| 90 |
+
# Denoted (B, T, Q, D, P) in the paper
|
| 91 |
+
batch, seqlen, chunk_size, dim, headdim = 1, 2048, 64, 2048, 64
|
| 92 |
+
nheads = dim // headdim # (H) in the paper
|
| 93 |
+
ngroups = 1 # (G) in the paper
|
| 94 |
+
dstate = 64 # (N) in the paper
|
| 95 |
+
dtype = torch.float32
|
| 96 |
+
device = "cuda"
|
| 97 |
+
|
| 98 |
+
x = torch.randn(batch, seqlen, nheads, headdim, dtype=dtype, device=device)
|
| 99 |
+
dt = F.softplus(
|
| 100 |
+
torch.randn(batch, seqlen, nheads, dtype=torch.float32, device=device) - 4
|
| 101 |
+
).requires_grad_()
|
| 102 |
+
A = (
|
| 103 |
+
-torch.exp(torch.rand(nheads, dtype=torch.float32, device=device))
|
| 104 |
+
).requires_grad_()
|
| 105 |
+
B = torch.randn(batch, seqlen, ngroups, dstate, dtype=dtype, device=device)
|
| 106 |
+
C = torch.randn(batch, seqlen, ngroups, dstate, dtype=dtype, device=device)
|
| 107 |
+
D = torch.randn(nheads, dtype=dtype, device=device)
|
| 108 |
+
|
| 109 |
+
# Comparing fused version and minimal version
|
| 110 |
+
y = mamba_chunk_scan_combined(x, dt, A, B, C, chunk_size, D=None)
|
| 111 |
+
y_min, _ = ssd_minimal_discrete(x * dt.unsqueeze(-1), A * dt, B, C, chunk_size)
|
build/torch213-cxx11-cu126-x86_64-linux/ops/__init__.py
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
from .triton import selective_state_update, mamba_chunk_scan_combined, mamba_split_conv1d_scan_combined
|
build/torch213-cxx11-cu126-x86_64-linux/ops/selective_scan_interface.py
ADDED
|
@@ -0,0 +1,446 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2023, Tri Dao, Albert Gu.
|
| 2 |
+
|
| 3 |
+
import torch
|
| 4 |
+
import torch.nn.functional as F
|
| 5 |
+
from ..utils.torch import custom_fwd, custom_bwd
|
| 6 |
+
|
| 7 |
+
from einops import rearrange, repeat
|
| 8 |
+
|
| 9 |
+
try:
|
| 10 |
+
from causal_conv1d import causal_conv1d_fn
|
| 11 |
+
from causal_conv1d.causal_conv1d_interface import causal_conv1d_cuda
|
| 12 |
+
except ImportError:
|
| 13 |
+
causal_conv1d_fn = None
|
| 14 |
+
causal_conv1d_cuda = None
|
| 15 |
+
|
| 16 |
+
from .triton.layer_norm import _layer_norm_fwd
|
| 17 |
+
|
| 18 |
+
from .._ops import ops
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
class SelectiveScanFn(torch.autograd.Function):
|
| 22 |
+
|
| 23 |
+
@staticmethod
|
| 24 |
+
def forward(ctx, u, delta, A, B, C, D=None, z=None, delta_bias=None, delta_softplus=False,
|
| 25 |
+
return_last_state=False):
|
| 26 |
+
if u.stride(-1) != 1:
|
| 27 |
+
u = u.contiguous()
|
| 28 |
+
if delta.stride(-1) != 1:
|
| 29 |
+
delta = delta.contiguous()
|
| 30 |
+
if D is not None:
|
| 31 |
+
D = D.contiguous()
|
| 32 |
+
if B.stride(-1) != 1:
|
| 33 |
+
B = B.contiguous()
|
| 34 |
+
if C.stride(-1) != 1:
|
| 35 |
+
C = C.contiguous()
|
| 36 |
+
if z is not None and z.stride(-1) != 1:
|
| 37 |
+
z = z.contiguous()
|
| 38 |
+
if B.dim() == 3:
|
| 39 |
+
B = rearrange(B, "b dstate l -> b 1 dstate l")
|
| 40 |
+
ctx.squeeze_B = True
|
| 41 |
+
if C.dim() == 3:
|
| 42 |
+
C = rearrange(C, "b dstate l -> b 1 dstate l")
|
| 43 |
+
ctx.squeeze_C = True
|
| 44 |
+
out, x, *rest = ops.selective_scan_fwd(
|
| 45 |
+
u, delta, A, B, C, D, z, delta_bias, delta_softplus
|
| 46 |
+
)
|
| 47 |
+
ctx.delta_softplus = delta_softplus
|
| 48 |
+
ctx.has_z = z is not None
|
| 49 |
+
last_state = x[:, :, -1, 1::2] # (batch, dim, dstate)
|
| 50 |
+
if not ctx.has_z:
|
| 51 |
+
ctx.save_for_backward(u, delta, A, B, C, D, delta_bias, x)
|
| 52 |
+
return out if not return_last_state else (out, last_state)
|
| 53 |
+
else:
|
| 54 |
+
ctx.save_for_backward(u, delta, A, B, C, D, z, delta_bias, x, out)
|
| 55 |
+
out_z = rest[0]
|
| 56 |
+
return out_z if not return_last_state else (out_z, last_state)
|
| 57 |
+
|
| 58 |
+
@staticmethod
|
| 59 |
+
def backward(ctx, dout, *args):
|
| 60 |
+
if not ctx.has_z:
|
| 61 |
+
u, delta, A, B, C, D, delta_bias, x = ctx.saved_tensors
|
| 62 |
+
z = None
|
| 63 |
+
out = None
|
| 64 |
+
else:
|
| 65 |
+
u, delta, A, B, C, D, z, delta_bias, x, out = ctx.saved_tensors
|
| 66 |
+
if dout.stride(-1) != 1:
|
| 67 |
+
dout = dout.contiguous()
|
| 68 |
+
# The kernel supports passing in a pre-allocated dz (e.g., in case we want to fuse the
|
| 69 |
+
# backward of selective_scan_cuda with the backward of chunk).
|
| 70 |
+
# Here we just pass in None and dz will be allocated in the C++ code.
|
| 71 |
+
du, ddelta, dA, dB, dC, dD, ddelta_bias, *rest = ops.selective_scan_bwd(
|
| 72 |
+
u,
|
| 73 |
+
delta,
|
| 74 |
+
A,
|
| 75 |
+
B,
|
| 76 |
+
C,
|
| 77 |
+
D,
|
| 78 |
+
z,
|
| 79 |
+
delta_bias,
|
| 80 |
+
dout,
|
| 81 |
+
x,
|
| 82 |
+
out,
|
| 83 |
+
None,
|
| 84 |
+
ctx.delta_softplus,
|
| 85 |
+
False, # option to recompute out_z, not used here
|
| 86 |
+
)
|
| 87 |
+
dz = rest[0] if ctx.has_z else None
|
| 88 |
+
dB = dB.squeeze(1) if getattr(ctx, "squeeze_B", False) else dB
|
| 89 |
+
dC = dC.squeeze(1) if getattr(ctx, "squeeze_C", False) else dC
|
| 90 |
+
return (du, ddelta, dA, dB, dC,
|
| 91 |
+
dD if D is not None else None,
|
| 92 |
+
dz,
|
| 93 |
+
ddelta_bias if delta_bias is not None else None,
|
| 94 |
+
None,
|
| 95 |
+
None)
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
def rms_norm_forward(
|
| 99 |
+
x,
|
| 100 |
+
weight,
|
| 101 |
+
bias,
|
| 102 |
+
eps=1e-6,
|
| 103 |
+
is_rms_norm=True,
|
| 104 |
+
):
|
| 105 |
+
# x (b l) d
|
| 106 |
+
if x.stride(-1) != 1:
|
| 107 |
+
x = x.contiguous()
|
| 108 |
+
weight = weight.contiguous()
|
| 109 |
+
if bias is not None:
|
| 110 |
+
bias = bias.contiguous()
|
| 111 |
+
y = _layer_norm_fwd(
|
| 112 |
+
x, weight, bias, eps, None, residual_dtype=None, is_rms_norm=is_rms_norm
|
| 113 |
+
)[0]
|
| 114 |
+
# y (b l) d
|
| 115 |
+
return y
|
| 116 |
+
|
| 117 |
+
|
| 118 |
+
def selective_scan_fn(u, delta, A, B, C, D=None, z=None, delta_bias=None, delta_softplus=False,
|
| 119 |
+
return_last_state=False):
|
| 120 |
+
"""if return_last_state is True, returns (out, last_state)
|
| 121 |
+
last_state has shape (batch, dim, dstate). Note that the gradient of the last state is
|
| 122 |
+
not considered in the backward pass.
|
| 123 |
+
"""
|
| 124 |
+
return SelectiveScanFn.apply(u, delta, A, B, C, D, z, delta_bias, delta_softplus, return_last_state)
|
| 125 |
+
|
| 126 |
+
|
| 127 |
+
def selective_scan_ref(u, delta, A, B, C, D=None, z=None, delta_bias=None, delta_softplus=False,
|
| 128 |
+
return_last_state=False):
|
| 129 |
+
"""
|
| 130 |
+
u: r(B D L)
|
| 131 |
+
delta: r(B D L)
|
| 132 |
+
A: c(D N) or r(D N)
|
| 133 |
+
B: c(D N) or r(B N L) or r(B N 2L) or r(B G N L) or (B G N L)
|
| 134 |
+
C: c(D N) or r(B N L) or r(B N 2L) or r(B G N L) or (B G N L)
|
| 135 |
+
D: r(D)
|
| 136 |
+
z: r(B D L)
|
| 137 |
+
delta_bias: r(D), fp32
|
| 138 |
+
|
| 139 |
+
out: r(B D L)
|
| 140 |
+
last_state (optional): r(B D dstate) or c(B D dstate)
|
| 141 |
+
"""
|
| 142 |
+
dtype_in = u.dtype
|
| 143 |
+
u = u.float()
|
| 144 |
+
delta = delta.float()
|
| 145 |
+
if delta_bias is not None:
|
| 146 |
+
delta = delta + delta_bias[..., None].float()
|
| 147 |
+
if delta_softplus:
|
| 148 |
+
delta = F.softplus(delta)
|
| 149 |
+
batch, dim, dstate = u.shape[0], A.shape[0], A.shape[1]
|
| 150 |
+
is_variable_B = B.dim() >= 3
|
| 151 |
+
is_variable_C = C.dim() >= 3
|
| 152 |
+
if A.is_complex():
|
| 153 |
+
if is_variable_B:
|
| 154 |
+
B = torch.view_as_complex(rearrange(B.float(), "... (L two) -> ... L two", two=2))
|
| 155 |
+
if is_variable_C:
|
| 156 |
+
C = torch.view_as_complex(rearrange(C.float(), "... (L two) -> ... L two", two=2))
|
| 157 |
+
else:
|
| 158 |
+
B = B.float()
|
| 159 |
+
C = C.float()
|
| 160 |
+
x = A.new_zeros((batch, dim, dstate))
|
| 161 |
+
ys = []
|
| 162 |
+
deltaA = torch.exp(torch.einsum('bdl,dn->bdln', delta, A))
|
| 163 |
+
if not is_variable_B:
|
| 164 |
+
deltaB_u = torch.einsum('bdl,dn,bdl->bdln', delta, B, u)
|
| 165 |
+
else:
|
| 166 |
+
if B.dim() == 3:
|
| 167 |
+
deltaB_u = torch.einsum('bdl,bnl,bdl->bdln', delta, B, u)
|
| 168 |
+
else:
|
| 169 |
+
B = repeat(B, "B G N L -> B (G H) N L", H=dim // B.shape[1])
|
| 170 |
+
deltaB_u = torch.einsum('bdl,bdnl,bdl->bdln', delta, B, u)
|
| 171 |
+
if is_variable_C and C.dim() == 4:
|
| 172 |
+
C = repeat(C, "B G N L -> B (G H) N L", H=dim // C.shape[1])
|
| 173 |
+
last_state = None
|
| 174 |
+
for i in range(u.shape[2]):
|
| 175 |
+
x = deltaA[:, :, i] * x + deltaB_u[:, :, i]
|
| 176 |
+
if not is_variable_C:
|
| 177 |
+
y = torch.einsum('bdn,dn->bd', x, C)
|
| 178 |
+
else:
|
| 179 |
+
if C.dim() == 3:
|
| 180 |
+
y = torch.einsum('bdn,bn->bd', x, C[:, :, i])
|
| 181 |
+
else:
|
| 182 |
+
y = torch.einsum('bdn,bdn->bd', x, C[:, :, :, i])
|
| 183 |
+
if i == u.shape[2] - 1:
|
| 184 |
+
last_state = x
|
| 185 |
+
if y.is_complex():
|
| 186 |
+
y = y.real * 2
|
| 187 |
+
ys.append(y)
|
| 188 |
+
y = torch.stack(ys, dim=2) # (batch dim L)
|
| 189 |
+
out = y if D is None else y + u * rearrange(D, "d -> d 1")
|
| 190 |
+
if z is not None:
|
| 191 |
+
out = out * F.silu(z)
|
| 192 |
+
out = out.to(dtype=dtype_in)
|
| 193 |
+
return out if not return_last_state else (out, last_state)
|
| 194 |
+
|
| 195 |
+
|
| 196 |
+
class MambaInnerFn(torch.autograd.Function):
|
| 197 |
+
|
| 198 |
+
@staticmethod
|
| 199 |
+
@custom_fwd
|
| 200 |
+
def forward(ctx, xz, conv1d_weight, conv1d_bias, x_proj_weight, delta_proj_weight,
|
| 201 |
+
out_proj_weight, out_proj_bias,
|
| 202 |
+
A, B=None, C=None, D=None, delta_bias=None, B_proj_bias=None,
|
| 203 |
+
C_proj_bias=None, delta_softplus=True, checkpoint_lvl=1, b_rms_weight=None, c_rms_weight= None, dt_rms_weight= None, b_c_dt_rms_eps=1e-6):
|
| 204 |
+
"""
|
| 205 |
+
xz: (batch, dim, seqlen)
|
| 206 |
+
"""
|
| 207 |
+
assert causal_conv1d_cuda is not None, "causal_conv1d_cuda is not available. Please install causal-conv1d."
|
| 208 |
+
assert checkpoint_lvl in [0, 1]
|
| 209 |
+
L = xz.shape[-1]
|
| 210 |
+
delta_rank = delta_proj_weight.shape[1]
|
| 211 |
+
d_state = A.shape[-1] * (1 if not A.is_complex() else 2)
|
| 212 |
+
if torch.is_autocast_enabled():
|
| 213 |
+
x_proj_weight = x_proj_weight.to(dtype=torch.get_autocast_gpu_dtype())
|
| 214 |
+
delta_proj_weight = delta_proj_weight.to(dtype=torch.get_autocast_gpu_dtype())
|
| 215 |
+
out_proj_weight = out_proj_weight.to(dtype=torch.get_autocast_gpu_dtype())
|
| 216 |
+
out_proj_bias = (out_proj_bias.to(dtype=torch.get_autocast_gpu_dtype())
|
| 217 |
+
if out_proj_bias is not None else None)
|
| 218 |
+
if xz.stride(-1) != 1:
|
| 219 |
+
xz = xz.contiguous()
|
| 220 |
+
conv1d_weight = rearrange(conv1d_weight, "d 1 w -> d w")
|
| 221 |
+
x, z = xz.chunk(2, dim=1)
|
| 222 |
+
conv1d_bias = conv1d_bias.contiguous() if conv1d_bias is not None else None
|
| 223 |
+
conv1d_out = causal_conv1d_cuda.causal_conv1d_fwd(
|
| 224 |
+
x, conv1d_weight, conv1d_bias, None, None, None, True
|
| 225 |
+
)
|
| 226 |
+
# We're being very careful here about the layout, to avoid extra transposes.
|
| 227 |
+
# We want delta to have d as the slowest moving dimension
|
| 228 |
+
# and L as the fastest moving dimension, since those are what the ssm_scan kernel expects.
|
| 229 |
+
x_dbl = F.linear(rearrange(conv1d_out, 'b d l -> (b l) d'), x_proj_weight) # (bl d)
|
| 230 |
+
delta = rearrange(delta_proj_weight @ x_dbl[:, :delta_rank].t(), "d (b l) -> b d l", l = L)
|
| 231 |
+
ctx.is_variable_B = B is None
|
| 232 |
+
ctx.is_variable_C = C is None
|
| 233 |
+
ctx.B_proj_bias_is_None = B_proj_bias is None
|
| 234 |
+
ctx.C_proj_bias_is_None = C_proj_bias is None
|
| 235 |
+
if B is None: # variable B
|
| 236 |
+
B = x_dbl[:, delta_rank:delta_rank + d_state] # (bl dstate)
|
| 237 |
+
if B_proj_bias is not None:
|
| 238 |
+
B = B + B_proj_bias.to(dtype=B.dtype)
|
| 239 |
+
if not A.is_complex():
|
| 240 |
+
# B = rearrange(B, "(b l) dstate -> b dstate l", l=L).contiguous()
|
| 241 |
+
B = rearrange(B, "(b l) dstate -> b 1 dstate l", l=L).contiguous()
|
| 242 |
+
else:
|
| 243 |
+
B = rearrange(B, "(b l) (dstate two) -> b 1 dstate (l two)", l=L, two=2).contiguous()
|
| 244 |
+
else:
|
| 245 |
+
if B.stride(-1) != 1:
|
| 246 |
+
B = B.contiguous()
|
| 247 |
+
if C is None: # variable C
|
| 248 |
+
C = x_dbl[:, -d_state:] # (bl dstate)
|
| 249 |
+
if C_proj_bias is not None:
|
| 250 |
+
C = C + C_proj_bias.to(dtype=C.dtype)
|
| 251 |
+
if not A.is_complex():
|
| 252 |
+
# C = rearrange(C, "(b l) dstate -> b dstate l", l=L).contiguous()
|
| 253 |
+
C = rearrange(C, "(b l) dstate -> b 1 dstate l", l=L).contiguous()
|
| 254 |
+
else:
|
| 255 |
+
C = rearrange(C, "(b l) (dstate two) -> b 1 dstate (l two)", l=L, two=2).contiguous()
|
| 256 |
+
else:
|
| 257 |
+
if C.stride(-1) != 1:
|
| 258 |
+
C = C.contiguous()
|
| 259 |
+
if D is not None:
|
| 260 |
+
D = D.contiguous()
|
| 261 |
+
|
| 262 |
+
if b_rms_weight is not None:
|
| 263 |
+
B = rearrange(B, "b 1 dstate l -> (b l) dstate", l=L).contiguous()
|
| 264 |
+
B = rms_norm_forward(B, b_rms_weight, bias=None, eps=b_c_dt_rms_eps)
|
| 265 |
+
B = rearrange(B, "(b l) dstate -> b 1 dstate l", l=L).contiguous()
|
| 266 |
+
if c_rms_weight is not None:
|
| 267 |
+
C = rearrange(C, "b 1 dstate l -> (b l) dstate", l=L).contiguous()
|
| 268 |
+
C = rms_norm_forward(C, c_rms_weight, bias=None, eps=b_c_dt_rms_eps)
|
| 269 |
+
C = rearrange(C, "(b l) dstate -> b 1 dstate l", l=L).contiguous()
|
| 270 |
+
if dt_rms_weight is not None:
|
| 271 |
+
delta = rearrange(delta, "b d l -> (b l) d", l=L).contiguous()
|
| 272 |
+
delta = rms_norm_forward(delta, dt_rms_weight, bias=None, eps=b_c_dt_rms_eps)
|
| 273 |
+
delta = rearrange(delta, "(b l) d -> b d l", l=L).contiguous()
|
| 274 |
+
|
| 275 |
+
out, scan_intermediates, out_z = ops.selective_scan_fwd(
|
| 276 |
+
conv1d_out, delta, A, B, C, D, z, delta_bias, delta_softplus
|
| 277 |
+
)
|
| 278 |
+
ctx.delta_softplus = delta_softplus
|
| 279 |
+
ctx.out_proj_bias_is_None = out_proj_bias is None
|
| 280 |
+
ctx.checkpoint_lvl = checkpoint_lvl
|
| 281 |
+
ctx.b_rms_weight = b_rms_weight
|
| 282 |
+
ctx.c_rms_weight = c_rms_weight
|
| 283 |
+
ctx.dt_rms_weight = dt_rms_weight
|
| 284 |
+
ctx.b_c_dt_rms_eps = b_c_dt_rms_eps
|
| 285 |
+
if checkpoint_lvl >= 1: # Will recompute conv1d_out and delta in the backward pass
|
| 286 |
+
conv1d_out, delta = None, None
|
| 287 |
+
ctx.save_for_backward(xz, conv1d_weight, conv1d_bias, x_dbl, x_proj_weight,
|
| 288 |
+
delta_proj_weight, out_proj_weight, conv1d_out, delta,
|
| 289 |
+
A, B, C, D, delta_bias, scan_intermediates, b_rms_weight, c_rms_weight, dt_rms_weight, out)
|
| 290 |
+
return F.linear(rearrange(out_z, "b d l -> b l d"), out_proj_weight, out_proj_bias)
|
| 291 |
+
|
| 292 |
+
@staticmethod
|
| 293 |
+
@custom_bwd
|
| 294 |
+
def backward(ctx, dout):
|
| 295 |
+
# dout: (batch, seqlen, dim)
|
| 296 |
+
assert causal_conv1d_cuda is not None, "causal_conv1d_cuda is not available. Please install causal-conv1d."
|
| 297 |
+
(xz, conv1d_weight, conv1d_bias, x_dbl, x_proj_weight, delta_proj_weight, out_proj_weight,
|
| 298 |
+
conv1d_out, delta, A, B, C, D, delta_bias, scan_intermediates, b_rms_weight, c_rms_weight, dt_rms_weight, out) = ctx.saved_tensors
|
| 299 |
+
L = xz.shape[-1]
|
| 300 |
+
delta_rank = delta_proj_weight.shape[1]
|
| 301 |
+
d_state = A.shape[-1] * (1 if not A.is_complex() else 2)
|
| 302 |
+
x, z = xz.chunk(2, dim=1)
|
| 303 |
+
if dout.stride(-1) != 1:
|
| 304 |
+
dout = dout.contiguous()
|
| 305 |
+
if ctx.checkpoint_lvl == 1:
|
| 306 |
+
conv1d_out = causal_conv1d_cuda.causal_conv1d_fwd(
|
| 307 |
+
x, conv1d_weight, conv1d_bias, None, None, None, True
|
| 308 |
+
)
|
| 309 |
+
delta = rearrange(delta_proj_weight @ x_dbl[:, :delta_rank].t(),
|
| 310 |
+
"d (b l) -> b d l", l = L)
|
| 311 |
+
if dt_rms_weight is not None:
|
| 312 |
+
delta = rearrange(delta, "b d l -> (b l) d", l=L).contiguous()
|
| 313 |
+
delta = rms_norm_forward(delta, ctx.dt_rms_weight, None, ctx.b_c_dt_rms_eps)
|
| 314 |
+
delta = rearrange(delta, "(b l) d -> b d l", l=L).contiguous()
|
| 315 |
+
if b_rms_weight is not None:
|
| 316 |
+
# Recompute & RMSNorm B
|
| 317 |
+
B = rearrange(B, "b 1 dstate l -> (b l) dstate", l=L).contiguous()
|
| 318 |
+
B = rms_norm_forward(
|
| 319 |
+
B, ctx.b_rms_weight, None, ctx.b_c_dt_rms_eps
|
| 320 |
+
)
|
| 321 |
+
B = rearrange(B, "(b l) dstate -> b 1 dstate l", l=L).contiguous()
|
| 322 |
+
if c_rms_weight is not None:
|
| 323 |
+
# Recompute & RMSNorm C
|
| 324 |
+
C = rearrange(C, "b 1 dstate l -> (b l) dstate", l=L).contiguous()
|
| 325 |
+
C = rms_norm_forward(
|
| 326 |
+
C, ctx.c_rms_weight, None, ctx.b_c_dt_rms_eps
|
| 327 |
+
)
|
| 328 |
+
C = rearrange(C, "(b l) dstate -> b 1 dstate l", l=L).contiguous()
|
| 329 |
+
|
| 330 |
+
# The kernel supports passing in a pre-allocated dz (e.g., in case we want to fuse the
|
| 331 |
+
# backward of selective_scan_cuda with the backward of chunk).
|
| 332 |
+
dxz = torch.empty_like(xz) # (batch, dim, seqlen)
|
| 333 |
+
dx, dz = dxz.chunk(2, dim=1)
|
| 334 |
+
dout = rearrange(dout, "b l e -> e (b l)")
|
| 335 |
+
dout_y = rearrange(out_proj_weight.t() @ dout, "d (b l) -> b d l", l=L)
|
| 336 |
+
dconv1d_out, ddelta, dA, dB, dC, dD, ddelta_bias, dz, out_z = (
|
| 337 |
+
ops.selective_scan_bwd(
|
| 338 |
+
conv1d_out,
|
| 339 |
+
delta,
|
| 340 |
+
A,
|
| 341 |
+
B,
|
| 342 |
+
C,
|
| 343 |
+
D,
|
| 344 |
+
z,
|
| 345 |
+
delta_bias,
|
| 346 |
+
dout_y,
|
| 347 |
+
scan_intermediates,
|
| 348 |
+
out,
|
| 349 |
+
dz,
|
| 350 |
+
ctx.delta_softplus,
|
| 351 |
+
True, # option to recompute out_z
|
| 352 |
+
)
|
| 353 |
+
)
|
| 354 |
+
dout_proj_weight = torch.einsum(
|
| 355 |
+
"eB,dB->ed", dout, rearrange(out_z, "b d l -> d (b l)")
|
| 356 |
+
)
|
| 357 |
+
dout_proj_bias = dout.sum(dim=(0, 1)) if not ctx.out_proj_bias_is_None else None
|
| 358 |
+
dD = dD if D is not None else None
|
| 359 |
+
dx_dbl = torch.empty_like(x_dbl)
|
| 360 |
+
dB_proj_bias = None
|
| 361 |
+
if ctx.is_variable_B:
|
| 362 |
+
if not A.is_complex():
|
| 363 |
+
dB = rearrange(dB, "b 1 dstate l -> (b l) dstate").contiguous()
|
| 364 |
+
else:
|
| 365 |
+
dB = rearrange(dB, "b 1 dstate (l two) -> (b l) (dstate two)", two=2).contiguous()
|
| 366 |
+
dB_proj_bias = dB.sum(0) if not ctx.B_proj_bias_is_None else None
|
| 367 |
+
dx_dbl[:, delta_rank:delta_rank + d_state] = dB # (bl d)
|
| 368 |
+
dB = None
|
| 369 |
+
dC_proj_bias = None
|
| 370 |
+
if ctx.is_variable_C:
|
| 371 |
+
if not A.is_complex():
|
| 372 |
+
dC = rearrange(dC, "b 1 dstate l -> (b l) dstate").contiguous()
|
| 373 |
+
else:
|
| 374 |
+
dC = rearrange(dC, "b 1 dstate (l two) -> (b l) (dstate two)", two=2).contiguous()
|
| 375 |
+
dC_proj_bias = dC.sum(0) if not ctx.C_proj_bias_is_None else None
|
| 376 |
+
dx_dbl[:, -d_state:] = dC # (bl d)
|
| 377 |
+
dC = None
|
| 378 |
+
ddelta = rearrange(ddelta, "b d l -> d (b l)")
|
| 379 |
+
ddelta_proj_weight = torch.einsum("dB,Br->dr", ddelta, x_dbl[:, :delta_rank])
|
| 380 |
+
dx_dbl[:, :delta_rank] = torch.einsum("dB,dr->Br", ddelta, delta_proj_weight)
|
| 381 |
+
dconv1d_out = rearrange(dconv1d_out, "b d l -> d (b l)")
|
| 382 |
+
dx_proj_weight = torch.einsum("Br,Bd->rd", dx_dbl, rearrange(conv1d_out, "b d l -> (b l) d"))
|
| 383 |
+
dconv1d_out = torch.addmm(dconv1d_out, x_proj_weight.t(), dx_dbl.t(), out=dconv1d_out)
|
| 384 |
+
dconv1d_out = rearrange(dconv1d_out, "d (b l) -> b d l", b=x.shape[0], l=x.shape[-1])
|
| 385 |
+
# The kernel supports passing in a pre-allocated dx (e.g., in case we want to fuse the
|
| 386 |
+
# backward of conv1d with the backward of chunk).
|
| 387 |
+
dx, dconv1d_weight, dconv1d_bias, *_ = causal_conv1d_cuda.causal_conv1d_bwd(
|
| 388 |
+
x, conv1d_weight, conv1d_bias, dconv1d_out, None, None, None, dx, False, True
|
| 389 |
+
)
|
| 390 |
+
dconv1d_bias = dconv1d_bias if conv1d_bias is not None else None
|
| 391 |
+
dconv1d_weight = rearrange(dconv1d_weight, "d w -> d 1 w")
|
| 392 |
+
return (dxz, dconv1d_weight, dconv1d_bias, dx_proj_weight, ddelta_proj_weight,
|
| 393 |
+
dout_proj_weight, dout_proj_bias,
|
| 394 |
+
dA, dB, dC, dD,
|
| 395 |
+
ddelta_bias if delta_bias is not None else None,
|
| 396 |
+
# 6-None are delta_softplus, checkpoint_lvl, b_rms_weight, c_rms_weight, dt_rms_weight, b_c_dt_rms_eps
|
| 397 |
+
dB_proj_bias, dC_proj_bias, None, None, None, None, None, None)
|
| 398 |
+
|
| 399 |
+
|
| 400 |
+
def mamba_inner_fn(
|
| 401 |
+
xz, conv1d_weight, conv1d_bias, x_proj_weight, delta_proj_weight,
|
| 402 |
+
out_proj_weight, out_proj_bias,
|
| 403 |
+
A, B=None, C=None, D=None, delta_bias=None, B_proj_bias=None,
|
| 404 |
+
C_proj_bias=None, delta_softplus=True, checkpoint_lvl=1, b_rms_weight= None, c_rms_weight= None, dt_rms_weight= None, b_c_dt_rms_eps=1e-6
|
| 405 |
+
):
|
| 406 |
+
return MambaInnerFn.apply(xz, conv1d_weight, conv1d_bias, x_proj_weight, delta_proj_weight,
|
| 407 |
+
out_proj_weight, out_proj_bias,
|
| 408 |
+
A, B, C, D, delta_bias, B_proj_bias, C_proj_bias, delta_softplus, checkpoint_lvl, b_rms_weight, c_rms_weight, dt_rms_weight, b_c_dt_rms_eps)
|
| 409 |
+
|
| 410 |
+
|
| 411 |
+
def mamba_inner_ref(
|
| 412 |
+
xz, conv1d_weight, conv1d_bias, x_proj_weight, delta_proj_weight,
|
| 413 |
+
out_proj_weight, out_proj_bias,
|
| 414 |
+
A, B=None, C=None, D=None, delta_bias=None, B_proj_bias=None,
|
| 415 |
+
C_proj_bias=None, delta_softplus=True
|
| 416 |
+
):
|
| 417 |
+
assert causal_conv1d_fn is not None, "causal_conv1d_fn is not available. Please install causal-conv1d."
|
| 418 |
+
L = xz.shape[-1]
|
| 419 |
+
delta_rank = delta_proj_weight.shape[1]
|
| 420 |
+
d_state = A.shape[-1] * (1 if not A.is_complex() else 2)
|
| 421 |
+
x, z = xz.chunk(2, dim=1)
|
| 422 |
+
x = causal_conv1d_fn(x, rearrange(conv1d_weight, "d 1 w -> d w"), conv1d_bias, activation="silu")
|
| 423 |
+
# We're being very careful here about the layout, to avoid extra transposes.
|
| 424 |
+
# We want delta to have d as the slowest moving dimension
|
| 425 |
+
# and L as the fastest moving dimension, since those are what the ssm_scan kernel expects.
|
| 426 |
+
x_dbl = F.linear(rearrange(x, 'b d l -> (b l) d'), x_proj_weight) # (bl d)
|
| 427 |
+
delta = delta_proj_weight @ x_dbl[:, :delta_rank].t()
|
| 428 |
+
delta = rearrange(delta, "d (b l) -> b d l", l=L)
|
| 429 |
+
if B is None: # variable B
|
| 430 |
+
B = x_dbl[:, delta_rank:delta_rank + d_state] # (bl d)
|
| 431 |
+
if B_proj_bias is not None:
|
| 432 |
+
B = B + B_proj_bias.to(dtype=B.dtype)
|
| 433 |
+
if not A.is_complex():
|
| 434 |
+
B = rearrange(B, "(b l) dstate -> b dstate l", l=L).contiguous()
|
| 435 |
+
else:
|
| 436 |
+
B = rearrange(B, "(b l) (dstate two) -> b dstate (l two)", l=L, two=2).contiguous()
|
| 437 |
+
if C is None: # variable B
|
| 438 |
+
C = x_dbl[:, -d_state:] # (bl d)
|
| 439 |
+
if C_proj_bias is not None:
|
| 440 |
+
C = C + C_proj_bias.to(dtype=C.dtype)
|
| 441 |
+
if not A.is_complex():
|
| 442 |
+
C = rearrange(C, "(b l) dstate -> b dstate l", l=L).contiguous()
|
| 443 |
+
else:
|
| 444 |
+
C = rearrange(C, "(b l) (dstate two) -> b dstate (l two)", l=L, two=2).contiguous()
|
| 445 |
+
y = selective_scan_fn(x, delta, A, B, C, D, z=z, delta_bias=delta_bias, delta_softplus=True)
|
| 446 |
+
return F.linear(rearrange(y, "b d l -> b l d"), out_proj_weight, out_proj_bias)
|
build/torch213-cxx11-cu126-x86_64-linux/ops/triton/__init__.py
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .selective_state_update import selective_state_update
|
| 2 |
+
from .ssd_combined import mamba_chunk_scan_combined, mamba_split_conv1d_scan_combined
|
build/torch213-cxx11-cu126-x86_64-linux/ops/triton/k_activations.py
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024, Tri Dao, Albert Gu.
|
| 2 |
+
|
| 3 |
+
import torch
|
| 4 |
+
|
| 5 |
+
import triton
|
| 6 |
+
import triton.language as tl
|
| 7 |
+
|
| 8 |
+
|
| 9 |
+
@triton.autotune(
|
| 10 |
+
configs=[
|
| 11 |
+
triton.Config({'BLOCK_N': 32}),
|
| 12 |
+
triton.Config({'BLOCK_N': 64}),
|
| 13 |
+
triton.Config({'BLOCK_N': 128}),
|
| 14 |
+
triton.Config({'BLOCK_N': 256}),
|
| 15 |
+
triton.Config({'BLOCK_N': 512}),
|
| 16 |
+
triton.Config({'BLOCK_N': 1024}),
|
| 17 |
+
],
|
| 18 |
+
key=['ncols'],
|
| 19 |
+
)
|
| 20 |
+
@triton.jit
|
| 21 |
+
def _swiglu_fwd_kernel(
|
| 22 |
+
X,
|
| 23 |
+
Y,
|
| 24 |
+
OUT,
|
| 25 |
+
stride_x_row, # how much to increase the pointer when moving by 1 row
|
| 26 |
+
stride_y_row,
|
| 27 |
+
stride_out_row,
|
| 28 |
+
ncols,
|
| 29 |
+
BLOCK_N: tl.constexpr,
|
| 30 |
+
):
|
| 31 |
+
# Map the program id to the row of X and Y it should compute.
|
| 32 |
+
row = tl.program_id(0)
|
| 33 |
+
start_col = tl.program_id(1) * BLOCK_N
|
| 34 |
+
X += row * stride_x_row
|
| 35 |
+
Y += row * stride_y_row
|
| 36 |
+
OUT += row * stride_out_row
|
| 37 |
+
cols = start_col + tl.arange(0, BLOCK_N)
|
| 38 |
+
x = tl.load(X + cols, mask=cols < ncols, other=0.).to(tl.float32)
|
| 39 |
+
y = tl.load(Y + cols, mask=cols < ncols, other=0.).to(tl.float32)
|
| 40 |
+
out = x * tl.sigmoid(x) * y
|
| 41 |
+
tl.store(OUT + cols, out, mask=cols < ncols)
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
def _swiglu_fwd(xy, out=None):
|
| 45 |
+
if xy.stride(-1) != 1:
|
| 46 |
+
xy = xy.contiguous()
|
| 47 |
+
batch_shape = xy.shape[:-1]
|
| 48 |
+
xy = xy.reshape(-1, xy.shape[-1])
|
| 49 |
+
x, y = xy.chunk(2, dim=-1)
|
| 50 |
+
if out is None:
|
| 51 |
+
out = torch.empty_like(x)
|
| 52 |
+
else:
|
| 53 |
+
out = out.reshape(-1, out.shape[-1])
|
| 54 |
+
assert out.shape == x.shape
|
| 55 |
+
assert out.stride(-1) == 1
|
| 56 |
+
M, N = x.shape
|
| 57 |
+
grid = lambda META: (M, triton.cdiv(N, META['BLOCK_N']))
|
| 58 |
+
with torch.cuda.device(x.device.index):
|
| 59 |
+
_swiglu_fwd_kernel[grid](x, y, out, x.stride(0), y.stride(0), out.stride(0), N)
|
| 60 |
+
return out.reshape(*batch_shape, out.shape[-1])
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
@triton.autotune(
|
| 64 |
+
configs=[
|
| 65 |
+
triton.Config({'BLOCK_N': 32}),
|
| 66 |
+
triton.Config({'BLOCK_N': 64}),
|
| 67 |
+
triton.Config({'BLOCK_N': 128}),
|
| 68 |
+
triton.Config({'BLOCK_N': 256}),
|
| 69 |
+
triton.Config({'BLOCK_N': 512}),
|
| 70 |
+
triton.Config({'BLOCK_N': 1024}),
|
| 71 |
+
],
|
| 72 |
+
key=['ncols'],
|
| 73 |
+
)
|
| 74 |
+
@triton.heuristics({"RECOMPUTE_OUTPUT": lambda args: args["OUT"] is not None})
|
| 75 |
+
@triton.jit
|
| 76 |
+
def _swiglu_bwd_kernel(
|
| 77 |
+
X,
|
| 78 |
+
Y,
|
| 79 |
+
DOUT,
|
| 80 |
+
OUT,
|
| 81 |
+
DX,
|
| 82 |
+
DY,
|
| 83 |
+
stride_x_row, # how much to increase the pointer when moving by 1 row
|
| 84 |
+
stride_y_row,
|
| 85 |
+
stride_dout_row,
|
| 86 |
+
stride_out_row,
|
| 87 |
+
stride_dx_row,
|
| 88 |
+
stride_dy_row,
|
| 89 |
+
ncols,
|
| 90 |
+
BLOCK_N: tl.constexpr,
|
| 91 |
+
RECOMPUTE_OUTPUT: tl.constexpr,
|
| 92 |
+
):
|
| 93 |
+
# Map the program id to the row of X and Y it should compute.
|
| 94 |
+
row = tl.program_id(0)
|
| 95 |
+
start_col = tl.program_id(1) * BLOCK_N
|
| 96 |
+
X += row * stride_x_row
|
| 97 |
+
Y += row * stride_y_row
|
| 98 |
+
DOUT += row * stride_dout_row
|
| 99 |
+
if RECOMPUTE_OUTPUT:
|
| 100 |
+
OUT += row * stride_out_row
|
| 101 |
+
DX += row * stride_dx_row
|
| 102 |
+
DY += row * stride_dy_row
|
| 103 |
+
cols = start_col + tl.arange(0, BLOCK_N)
|
| 104 |
+
x = tl.load(X + cols, mask=cols < ncols, other=0.).to(tl.float32)
|
| 105 |
+
y = tl.load(Y + cols, mask=cols < ncols, other=0.).to(tl.float32)
|
| 106 |
+
dout = tl.load(DOUT + cols, mask=cols < ncols, other=0.).to(tl.float32)
|
| 107 |
+
x_sigmoid = tl.sigmoid(x)
|
| 108 |
+
dx = x_sigmoid * (1 + x * (1 - x_sigmoid)) * y * dout
|
| 109 |
+
dy = x * x_sigmoid * dout
|
| 110 |
+
tl.store(DX + cols, dx, mask=cols < ncols)
|
| 111 |
+
tl.store(DY + cols, dy, mask=cols < ncols)
|
| 112 |
+
if RECOMPUTE_OUTPUT:
|
| 113 |
+
out = x * x_sigmoid * y
|
| 114 |
+
tl.store(OUT + cols, out, mask=cols < ncols)
|
| 115 |
+
|
| 116 |
+
|
| 117 |
+
def _swiglu_bwd(xy, dout, dxy=None, recompute_output=False, out=None):
|
| 118 |
+
if xy.stride(-1) != 1:
|
| 119 |
+
xy = xy.contiguous()
|
| 120 |
+
if dout.stride(-1) != 1:
|
| 121 |
+
dout = dout.contiguous()
|
| 122 |
+
batch_shape = xy.shape[:-1]
|
| 123 |
+
xy = xy.reshape(-1, xy.shape[-1])
|
| 124 |
+
x, y = xy.chunk(2, dim=-1)
|
| 125 |
+
dout = dout.reshape(-1, dout.shape[-1])
|
| 126 |
+
assert dout.shape == x.shape
|
| 127 |
+
if dxy is None:
|
| 128 |
+
dxy = torch.empty_like(xy)
|
| 129 |
+
else:
|
| 130 |
+
dxy = dxy.reshape(-1, dxy.shape[-1])
|
| 131 |
+
assert dxy.shape == xy.shape
|
| 132 |
+
dx, dy = dxy.chunk(2, dim=-1)
|
| 133 |
+
assert dx.stride(-1) == 1
|
| 134 |
+
assert dy.stride(-1) == 1
|
| 135 |
+
if recompute_output:
|
| 136 |
+
if out is None:
|
| 137 |
+
out = torch.empty_like(x)
|
| 138 |
+
else:
|
| 139 |
+
out = out.reshape(-1, out.shape[-1])
|
| 140 |
+
assert out.shape == x.shape
|
| 141 |
+
assert out.stride(-1) == 1
|
| 142 |
+
M, N = x.shape
|
| 143 |
+
grid = lambda META: (M, triton.cdiv(N, META['BLOCK_N']))
|
| 144 |
+
with torch.cuda.device(x.device.index):
|
| 145 |
+
_swiglu_bwd_kernel[grid](x, y, dout, out if recompute_output else None, dx, dy,
|
| 146 |
+
x.stride(0), y.stride(0), dout.stride(0),
|
| 147 |
+
out.stride(0) if recompute_output else 0,
|
| 148 |
+
dx.stride(0), dy.stride(0),
|
| 149 |
+
N)
|
| 150 |
+
if not recompute_output:
|
| 151 |
+
return dxy.reshape(*batch_shape, dxy.shape[-1])
|
| 152 |
+
else:
|
| 153 |
+
return dxy.reshape(*batch_shape, dxy.shape[-1]), out.reshape(*batch_shape, out.shape[-1])
|
| 154 |
+
|
| 155 |
+
|
| 156 |
+
class SwiGLU(torch.autograd.Function):
|
| 157 |
+
|
| 158 |
+
@staticmethod
|
| 159 |
+
def forward(ctx, xy):
|
| 160 |
+
ctx.save_for_backward(xy)
|
| 161 |
+
return _swiglu_fwd(xy)
|
| 162 |
+
|
| 163 |
+
@staticmethod
|
| 164 |
+
def backward(ctx, dout):
|
| 165 |
+
xy, = ctx.saved_tensors
|
| 166 |
+
return _swiglu_bwd(xy, dout)
|
| 167 |
+
|
| 168 |
+
|
| 169 |
+
swiglu = SwiGLU.apply
|