Commit ·
7945f87
1
Parent(s): 19e58f9
Add conversion script
Browse files- ModernBERT-base-4bit.mlpackage/Data/com.apple.CoreML/model.mlmodel +2 -2
- ModernBERT-base-4bit.mlpackage/Manifest.json +3 -3
- ModernBERT-base.mlpackage/Data/com.apple.CoreML/model.mlmodel +2 -2
- ModernBERT-base.mlpackage/Manifest.json +3 -3
- ModernBERT-large-4bit.mlpackage/Data/com.apple.CoreML/model.mlmodel +2 -2
- ModernBERT-large-4bit.mlpackage/Manifest.json +8 -8
- ModernBERT-large.mlpackage/Data/com.apple.CoreML/model.mlmodel +2 -2
- ModernBERT-large.mlpackage/Manifest.json +8 -8
- README.md +17 -0
- convert.py +83 -0
ModernBERT-base-4bit.mlpackage/Data/com.apple.CoreML/model.mlmodel
CHANGED
|
@@ -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:b0e5498f10d54a0351e27f59884ece8901418a639c1545f130acfd7ed9de1a6e
|
| 3 |
+
size 278896
|
ModernBERT-base-4bit.mlpackage/Manifest.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
-
"
|
| 5 |
"author": "com.apple.CoreML",
|
| 6 |
"description": "CoreML Model Specification",
|
| 7 |
"name": "model.mlmodel",
|
| 8 |
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
},
|
| 10 |
-
"
|
| 11 |
"author": "com.apple.CoreML",
|
| 12 |
"description": "CoreML Model Weights",
|
| 13 |
"name": "weights",
|
| 14 |
"path": "com.apple.CoreML/weights"
|
| 15 |
}
|
| 16 |
},
|
| 17 |
-
"rootModelIdentifier": "
|
| 18 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
+
"5679C35F-3674-42B5-A1EB-CF36A3309400": {
|
| 5 |
"author": "com.apple.CoreML",
|
| 6 |
"description": "CoreML Model Specification",
|
| 7 |
"name": "model.mlmodel",
|
| 8 |
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
},
|
| 10 |
+
"F51070FD-D894-4A2E-BEBB-774355701FB7": {
|
| 11 |
"author": "com.apple.CoreML",
|
| 12 |
"description": "CoreML Model Weights",
|
| 13 |
"name": "weights",
|
| 14 |
"path": "com.apple.CoreML/weights"
|
| 15 |
}
|
| 16 |
},
|
| 17 |
+
"rootModelIdentifier": "5679C35F-3674-42B5-A1EB-CF36A3309400"
|
| 18 |
}
|
ModernBERT-base.mlpackage/Data/com.apple.CoreML/model.mlmodel
CHANGED
|
@@ -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:117a44931a590725359233dcf82eb1df1a2ce609c39da433cc0c12c613f33ce0
|
| 3 |
+
size 266913
|
ModernBERT-base.mlpackage/Manifest.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
-
"
|
| 5 |
"author": "com.apple.CoreML",
|
| 6 |
"description": "CoreML Model Specification",
|
| 7 |
"name": "model.mlmodel",
|
| 8 |
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
},
|
| 10 |
-
"
|
| 11 |
"author": "com.apple.CoreML",
|
| 12 |
"description": "CoreML Model Weights",
|
| 13 |
"name": "weights",
|
| 14 |
"path": "com.apple.CoreML/weights"
|
| 15 |
}
|
| 16 |
},
|
| 17 |
-
"rootModelIdentifier": "
|
| 18 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
+
"273F953B-8A06-40EB-96D9-D2F027393D23": {
|
| 5 |
"author": "com.apple.CoreML",
|
| 6 |
"description": "CoreML Model Specification",
|
| 7 |
"name": "model.mlmodel",
|
| 8 |
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
},
|
| 10 |
+
"D92B9527-3316-412B-B7A2-8B412B463912": {
|
| 11 |
"author": "com.apple.CoreML",
|
| 12 |
"description": "CoreML Model Weights",
|
| 13 |
"name": "weights",
|
| 14 |
"path": "com.apple.CoreML/weights"
|
| 15 |
}
|
| 16 |
},
|
| 17 |
+
"rootModelIdentifier": "273F953B-8A06-40EB-96D9-D2F027393D23"
|
| 18 |
}
|
ModernBERT-large-4bit.mlpackage/Data/com.apple.CoreML/model.mlmodel
CHANGED
|
@@ -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:b4907ed377d3c6808a53c2287cad2298b15d25d0c66de2ca49ae81cd3e7e562c
|
| 3 |
+
size 350807
|
ModernBERT-large-4bit.mlpackage/Manifest.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
-
"
|
| 5 |
-
"author": "com.apple.CoreML",
|
| 6 |
-
"description": "CoreML Model Weights",
|
| 7 |
-
"name": "weights",
|
| 8 |
-
"path": "com.apple.CoreML/weights"
|
| 9 |
-
},
|
| 10 |
-
"BDC69D2B-C6B6-4E19-A9C2-B2333CA42723": {
|
| 11 |
"author": "com.apple.CoreML",
|
| 12 |
"description": "CoreML Model Specification",
|
| 13 |
"name": "model.mlmodel",
|
| 14 |
"path": "com.apple.CoreML/model.mlmodel"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
}
|
| 16 |
},
|
| 17 |
-
"rootModelIdentifier": "
|
| 18 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
+
"2A4DCB67-0E33-4D7D-93B5-415E9AF6EEAB": {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
"author": "com.apple.CoreML",
|
| 6 |
"description": "CoreML Model Specification",
|
| 7 |
"name": "model.mlmodel",
|
| 8 |
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
+
},
|
| 10 |
+
"EA3A02AD-4E6B-4B0D-B3A2-0F39B5630C04": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Weights",
|
| 13 |
+
"name": "weights",
|
| 14 |
+
"path": "com.apple.CoreML/weights"
|
| 15 |
}
|
| 16 |
},
|
| 17 |
+
"rootModelIdentifier": "2A4DCB67-0E33-4D7D-93B5-415E9AF6EEAB"
|
| 18 |
}
|
ModernBERT-large.mlpackage/Data/com.apple.CoreML/model.mlmodel
CHANGED
|
@@ -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:da340e916321bea2e8bf96121154b0f4bd17cf87fe3e330dc891f5aa702cfab7
|
| 3 |
+
size 335671
|
ModernBERT-large.mlpackage/Manifest.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
-
"
|
| 5 |
-
"author": "com.apple.CoreML",
|
| 6 |
-
"description": "CoreML Model Weights",
|
| 7 |
-
"name": "weights",
|
| 8 |
-
"path": "com.apple.CoreML/weights"
|
| 9 |
-
},
|
| 10 |
-
"652E02D8-970C-42B2-806B-A5B2911B653D": {
|
| 11 |
"author": "com.apple.CoreML",
|
| 12 |
"description": "CoreML Model Specification",
|
| 13 |
"name": "model.mlmodel",
|
| 14 |
"path": "com.apple.CoreML/model.mlmodel"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
}
|
| 16 |
},
|
| 17 |
-
"rootModelIdentifier": "
|
| 18 |
}
|
|
|
|
| 1 |
{
|
| 2 |
"fileFormatVersion": "1.0.0",
|
| 3 |
"itemInfoEntries": {
|
| 4 |
+
"033ACE82-9893-4FCC-8758-C4A2366AB463": {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
"author": "com.apple.CoreML",
|
| 6 |
"description": "CoreML Model Specification",
|
| 7 |
"name": "model.mlmodel",
|
| 8 |
"path": "com.apple.CoreML/model.mlmodel"
|
| 9 |
+
},
|
| 10 |
+
"4B48085F-08D1-45D5-B120-69ED6033119C": {
|
| 11 |
+
"author": "com.apple.CoreML",
|
| 12 |
+
"description": "CoreML Model Weights",
|
| 13 |
+
"name": "weights",
|
| 14 |
+
"path": "com.apple.CoreML/weights"
|
| 15 |
}
|
| 16 |
},
|
| 17 |
+
"rootModelIdentifier": "033ACE82-9893-4FCC-8758-C4A2366AB463"
|
| 18 |
}
|
README.md
CHANGED
|
@@ -47,3 +47,20 @@ print("Result:")
|
|
| 47 |
print(text.replacingOccurrences(of: "[MASK]", with: predictedTokenText.trimmingCharacters(in: .whitespaces)))
|
| 48 |
// The capital of Ireland is Dublin.
|
| 49 |
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 47 |
print(text.replacingOccurrences(of: "[MASK]", with: predictedTokenText.trimmingCharacters(in: .whitespaces)))
|
| 48 |
// The capital of Ireland is Dublin.
|
| 49 |
```
|
| 50 |
+
|
| 51 |
+
### Conversion
|
| 52 |
+
|
| 53 |
+
```
|
| 54 |
+
uv run https://hf.co/finnvoorhees/ModernBERT-CoreML/raw/main/convert.py
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
```
|
| 58 |
+
usage: convert.py [-h] [--model MODEL] [--quantize]
|
| 59 |
+
|
| 60 |
+
Convert ModernBERT to CoreML
|
| 61 |
+
|
| 62 |
+
options:
|
| 63 |
+
-h, --help show this help message and exit
|
| 64 |
+
--model MODEL Model name
|
| 65 |
+
--quantize Linear quantize model
|
| 66 |
+
```
|
convert.py
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# /// script
|
| 2 |
+
# requires-python = ">=3.11"
|
| 3 |
+
# dependencies = [
|
| 4 |
+
# "coremltools",
|
| 5 |
+
# "torch",
|
| 6 |
+
# "transformers",
|
| 7 |
+
# ]
|
| 8 |
+
#
|
| 9 |
+
# [tool.uv.sources]
|
| 10 |
+
# transformers = { git = "https://github.com/huggingface/transformers.git", branch = "main" }
|
| 11 |
+
# ///
|
| 12 |
+
|
| 13 |
+
from transformers import AutoModelForMaskedLM
|
| 14 |
+
import torch
|
| 15 |
+
import coremltools as ct
|
| 16 |
+
import numpy as np
|
| 17 |
+
import argparse
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def log(text):
|
| 21 |
+
print(f"\033[92m\033[1m{text}\033[0m")
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
parser = argparse.ArgumentParser(
|
| 25 |
+
prog="convert.py", description="Convert ModernBERT to CoreML"
|
| 26 |
+
)
|
| 27 |
+
parser.add_argument("--model", type=str, default="ModernBERT-base", help="Model name")
|
| 28 |
+
parser.add_argument("--quantize", action="store_true", help="Linear quantize model")
|
| 29 |
+
args = parser.parse_args()
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
class Model(torch.nn.Module):
|
| 33 |
+
def __init__(self):
|
| 34 |
+
super().__init__()
|
| 35 |
+
self.model = AutoModelForMaskedLM.from_pretrained(f"answerdotai/{args.model}")
|
| 36 |
+
|
| 37 |
+
def forward(self, input_ids):
|
| 38 |
+
attention_mask = torch.ones_like(input_ids)
|
| 39 |
+
return self.model(input_ids=input_ids, attention_mask=attention_mask).logits
|
| 40 |
+
|
| 41 |
+
|
| 42 |
+
log("Loading model…")
|
| 43 |
+
model = Model().eval()
|
| 44 |
+
|
| 45 |
+
log("Tracing model…")
|
| 46 |
+
example_input = (torch.zeros((1, 1), dtype=torch.int32),)
|
| 47 |
+
traced_model = torch.jit.trace(model, example_input)
|
| 48 |
+
|
| 49 |
+
log("Converting model…")
|
| 50 |
+
input_shape = (
|
| 51 |
+
1,
|
| 52 |
+
ct.RangeDim(
|
| 53 |
+
lower_bound=1, upper_bound=model.model.config.max_position_embeddings, default=1
|
| 54 |
+
),
|
| 55 |
+
)
|
| 56 |
+
mlmodel = ct.convert(
|
| 57 |
+
traced_model,
|
| 58 |
+
inputs=[ct.TensorType(name="input_ids", shape=input_shape, dtype=np.int32)],
|
| 59 |
+
outputs=[ct.TensorType(name="logits")],
|
| 60 |
+
minimum_deployment_target=ct.target.macOS15,
|
| 61 |
+
)
|
| 62 |
+
|
| 63 |
+
if args.quantize:
|
| 64 |
+
log("Quantizing model…")
|
| 65 |
+
op_config = ct.optimize.coreml.OpLinearQuantizerConfig(
|
| 66 |
+
mode="linear_symmetric",
|
| 67 |
+
dtype="int4",
|
| 68 |
+
granularity="per_block",
|
| 69 |
+
block_size=32,
|
| 70 |
+
)
|
| 71 |
+
config = ct.optimize.coreml.OptimizationConfig(global_config=op_config)
|
| 72 |
+
mlmodel = ct.optimize.coreml.linear_quantize_weights(mlmodel, config=config)
|
| 73 |
+
|
| 74 |
+
mlmodel.author = "Finn Voorhees"
|
| 75 |
+
mlmodel.short_description = "https://hf.co/finnvoorhees/ModernBERT-CoreML"
|
| 76 |
+
|
| 77 |
+
log("Saving mlmodel…")
|
| 78 |
+
if args.quantize:
|
| 79 |
+
mlmodel.save(f"{args.model}-4bit.mlpackage")
|
| 80 |
+
else:
|
| 81 |
+
mlmodel.save(f"{args.model}.mlpackage")
|
| 82 |
+
|
| 83 |
+
log("Done!")
|