Publish 9 pretraining and 27 complete source-selected models
Browse filesOriginal October 2 weights, strict portable CPU loader, exact shared tokenizer, source-selected head and parent identities. No retraining or new benchmark scoring; no blanket weight license assigned.
This view is limited to 50 files because it contains too many changes. See raw diff
- ENVIRONMENT_NOTE.json +10 -0
- README.md +167 -0
- build_catalog.py +141 -0
- catalog_build_audit.json +336 -0
- checkpoints/pretrain/EE/pt0/model.pt +3 -0
- checkpoints/pretrain/EE/pt1/model.pt +3 -0
- checkpoints/pretrain/EE/pt2/model.pt +3 -0
- checkpoints/pretrain/EP/pt0/model.pt +3 -0
- checkpoints/pretrain/EP/pt1/model.pt +3 -0
- checkpoints/pretrain/EP/pt2/model.pt +3 -0
- checkpoints/pretrain/ES/pt0/model.pt +3 -0
- checkpoints/pretrain/ES/pt1/model.pt +3 -0
- checkpoints/pretrain/ES/pt2/model.pt +3 -0
- checkpoints/source/EE/pt0/ft0/best.pt +3 -0
- checkpoints/source/EE/pt0/ft1/best.pt +3 -0
- checkpoints/source/EE/pt0/ft2/best.pt +3 -0
- checkpoints/source/EE/pt1/ft0/best.pt +3 -0
- checkpoints/source/EE/pt1/ft1/best.pt +3 -0
- checkpoints/source/EE/pt1/ft2/best.pt +3 -0
- checkpoints/source/EE/pt2/ft0/best.pt +3 -0
- checkpoints/source/EE/pt2/ft1/best.pt +3 -0
- checkpoints/source/EE/pt2/ft2/best.pt +3 -0
- checkpoints/source/EP/pt0/ft0/best.pt +3 -0
- checkpoints/source/EP/pt0/ft1/best.pt +3 -0
- checkpoints/source/EP/pt0/ft2/best.pt +3 -0
- checkpoints/source/EP/pt1/ft0/best.pt +3 -0
- checkpoints/source/EP/pt1/ft1/best.pt +3 -0
- checkpoints/source/EP/pt1/ft2/best.pt +3 -0
- checkpoints/source/EP/pt2/ft0/best.pt +3 -0
- checkpoints/source/EP/pt2/ft1/best.pt +3 -0
- checkpoints/source/EP/pt2/ft2/best.pt +3 -0
- checkpoints/source/ES/pt0/ft0/best.pt +3 -0
- checkpoints/source/ES/pt0/ft1/best.pt +3 -0
- checkpoints/source/ES/pt0/ft2/best.pt +3 -0
- checkpoints/source/ES/pt1/ft0/best.pt +3 -0
- checkpoints/source/ES/pt1/ft1/best.pt +3 -0
- checkpoints/source/ES/pt1/ft2/best.pt +3 -0
- checkpoints/source/ES/pt2/ft0/best.pt +3 -0
- checkpoints/source/ES/pt2/ft1/best.pt +3 -0
- checkpoints/source/ES/pt2/ft2/best.pt +3 -0
- config.json +86 -0
- cpu_replay_audit.json +34 -0
- example_pairs.json +10 -0
- inference.py +213 -0
- model_catalog.json +1156 -0
- portable_core.py +241 -0
- requirements-inference.txt +4 -0
- test_audit.json +12 -0
- test_inference.py +159 -0
- test_output.txt +22 -0
ENVIRONMENT_NOTE.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"status": "observed_and_documented",
|
| 3 |
+
"torch_imported_version": "2.3.0+cu121",
|
| 4 |
+
"torch_cuda_build": "12.1",
|
| 5 |
+
"torch_distribution_metadata": "2.9.1",
|
| 6 |
+
"cpu_replay_imported_binary": "2.3.0+cu121",
|
| 7 |
+
"clean_environment_installation_validated": false,
|
| 8 |
+
"historical_training_binary_version_established": false,
|
| 9 |
+
"scope": "Current CPU portable-loader checks; distribution metadata is inconsistent with imported module. This addendum does not alter checkpoints, scientific scores or the frozen core."
|
| 10 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
language:
|
| 3 |
+
- en
|
| 4 |
+
tags:
|
| 5 |
+
- biology
|
| 6 |
+
- protein
|
| 7 |
+
- gpt2
|
| 8 |
+
- reproducibility
|
| 9 |
+
- research
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
# bio2nl: the 2026-10-02 model collection
|
| 13 |
+
|
| 14 |
+
This package describes **9 freshly pretrained GPT-2-style models and 27 complete
|
| 15 |
+
source-validation-selected protein-pair classifiers**. It includes the exact
|
| 16 |
+
shared 32,000-entry BPE tokenizer, all configuration/provenance identities and an
|
| 17 |
+
offline CPU loader. Weights are the original files, not converted or retrained.
|
| 18 |
+
The model repository is `dnagpt/bio2nl-models`. Pin an immutable repository
|
| 19 |
+
revision when downloading; the accompanying GitHub release records the verified commit.
|
| 20 |
+
|
| 21 |
+
## Scope and scientific interpretation
|
| 22 |
+
|
| 23 |
+
EP pretraining mixes English and natural protein, ES mixes the same English and
|
| 24 |
+
residue-shuffled protein, and EE uses English plus additional English. Each run
|
| 25 |
+
uses 16,777,216 input tokens and 1,024 updates. Each condition has three
|
| 26 |
+
pretraining seeds. Each pretrained model has three source fine-tuning seeds.
|
| 27 |
+
Fine-tuning uses 8,044 protein sequence-pair training examples for five epochs;
|
| 28 |
+
minimum source validation cross-entropy selects the saved epoch, ties earlier.
|
| 29 |
+
Every selected checkpoint includes the fine-tuned backbone and its original
|
| 30 |
+
two-logit classifier head. No English pair labels trained or selected these heads.
|
| 31 |
+
|
| 32 |
+
These are exploratory research models. Protein labels measure the experiment's
|
| 33 |
+
operational sequence similarity, not verified structural or remote homology.
|
| 34 |
+
The current EP source-test accuracy is about 50.8%; its English transfer results
|
| 35 |
+
do not demonstrate reliable fixed-head sentence-similarity classification. A
|
| 36 |
+
modest exploratory ranking difference is reported in the accompanying study.
|
| 37 |
+
The CPU examples here are software checks, not new scientific evaluations.
|
| 38 |
+
|
| 39 |
+
Source and result release:
|
| 40 |
+
[GitHub immutable source](https://github.com/maris205/bio2nl/tree/0d91df978ab5ac8604a9216bb5a6036605aea910/releases/2026-10-03-v1/source)
|
| 41 |
+
and [Hugging Face protein/code release](https://huggingface.co/datasets/dnagpt/bio2nl/tree/62ced1ec44444b1879f2c473c553e6b5a9c6767f/releases/2026-10-03-v1).
|
| 42 |
+
|
| 43 |
+
## File identities and model identifiers
|
| 44 |
+
|
| 45 |
+
The trusted `model_catalog.json` SHA-256 is:
|
| 46 |
+
|
| 47 |
+
```
|
| 48 |
+
5f6694f206084ad51dcc27c1485c4b4d000ffe5023310482aab367d0815df067
|
| 49 |
+
```
|
| 50 |
+
|
| 51 |
+
The catalog binds every file's size/SHA, complete tensor-state digest, backbone
|
| 52 |
+
and head digests, full config, tokenizer, training protocol and prepared-data
|
| 53 |
+
manifest. Classifier entries also bind the source-selected epoch and the exact
|
| 54 |
+
pretraining parent. These hashes are independently projected from the frozen
|
| 55 |
+
training/source-selection records; a digest merely declared by a checkpoint is
|
| 56 |
+
not trusted.
|
| 57 |
+
|
| 58 |
+
| Identifier | Artifact |
|
| 59 |
+
|---|---|
|
| 60 |
+
| `EP-pt0` | Pretrained causal LM, condition EP, pretraining seed 0 |
|
| 61 |
+
| `EP-pt0-ft0` | Complete source-selected EP classifier, pretraining seed 0, fine-tuning seed 0 |
|
| 62 |
+
| `ES-pt1-ft2` | Complete source-selected ES classifier, pretraining seed 1, fine-tuning seed 2 |
|
| 63 |
+
|
| 64 |
+
Conditions are `EP`, `ES`, `EE`; both seed indices range from 0 to 2. All 36
|
| 65 |
+
weights total **15,845,506,290 bytes**. One checkpoint is about 440 MB. A
|
| 66 |
+
classifier is self-contained: its parent pretraining weight need not be downloaded
|
| 67 |
+
for inference. `upload_mapping.json` is a maintainer inventory with relative
|
| 68 |
+
original paths; it is not used by the public loader.
|
| 69 |
+
|
| 70 |
+
## Download only the selected model
|
| 71 |
+
|
| 72 |
+
Use the immutable model-repository commit recorded by the publication receipt.
|
| 73 |
+
Download `inference.py`, `portable_core.py`, `model_catalog.json`, `config.json`,
|
| 74 |
+
`tokenizer.json`, `example_pairs.json`, and one checkpoint, for example
|
| 75 |
+
`checkpoints/source/EP/pt0/ft0/best.pt`. Preserve this relative layout. The
|
| 76 |
+
`--checkpoint` option supports a differently located weight while keeping all
|
| 77 |
+
digest and provenance checks.
|
| 78 |
+
|
| 79 |
+
For example, after installing `huggingface_hub`:
|
| 80 |
+
|
| 81 |
+
```python
|
| 82 |
+
from huggingface_hub import snapshot_download
|
| 83 |
+
|
| 84 |
+
snapshot_download(
|
| 85 |
+
repo_id="dnagpt/bio2nl-models",
|
| 86 |
+
revision="<immutable model-repository commit from the publication receipt>",
|
| 87 |
+
local_dir="bio2nl-models",
|
| 88 |
+
allow_patterns=["inference.py", "portable_core.py", "model_catalog.json",
|
| 89 |
+
"config.json", "tokenizer.json", "example_pairs.json",
|
| 90 |
+
"checkpoints/source/EP/pt0/ft0/best.pt"],
|
| 91 |
+
)
|
| 92 |
+
```
|
| 93 |
+
|
| 94 |
+
## Offline verification and inference
|
| 95 |
+
|
| 96 |
+
The CPU checks used Python 3.12.3 and imported PyTorch 2.3.0+cu121.
|
| 97 |
+
The local distribution metadata incorrectly reported torch 2.9.1; see
|
| 98 |
+
`ENVIRONMENT_NOTE.json`. The requirements describe the observed import versions,
|
| 99 |
+
not a separately verified clean installation or a proven historical training binary.
|
| 100 |
+
Run in the directory containing the downloaded package. No network, credentials,
|
| 101 |
+
GPU, training acceptance, historical workspace path or benchmark examples are
|
| 102 |
+
required by the inference commands.
|
| 103 |
+
|
| 104 |
+
```bash
|
| 105 |
+
python inference.py verify \
|
| 106 |
+
--catalog model_catalog.json \
|
| 107 |
+
--catalog-sha256 5f6694f206084ad51dcc27c1485c4b4d000ffe5023310482aab367d0815df067 \
|
| 108 |
+
--artifact-root . --model-id EP-pt0-ft0
|
| 109 |
+
|
| 110 |
+
python inference.py predict \
|
| 111 |
+
--catalog model_catalog.json \
|
| 112 |
+
--catalog-sha256 5f6694f206084ad51dcc27c1485c4b4d000ffe5023310482aab367d0815df067 \
|
| 113 |
+
--artifact-root . --model-id EP-pt0-ft0 --pairs example_pairs.json
|
| 114 |
+
```
|
| 115 |
+
|
| 116 |
+
Input is a JSON list of objects with exactly `sentence1` and `sentence2`. The
|
| 117 |
+
program refuses labels, empty endpoints, unknown/special content tokens, failed
|
| 118 |
+
text roundtrips and hash/provenance mismatches. It independently caps each
|
| 119 |
+
endpoint at 255 content tokens, emits `a + SEP + b + EOS`, right-pads with ID 0,
|
| 120 |
+
and pools the last attention-mask-valid position. Output reports truncation,
|
| 121 |
+
both log probabilities, probability for fixed label 1, the label-1 minus label-0
|
| 122 |
+
margin, and uncalibrated argmax predictions (ties label 0). No polarity reversal,
|
| 123 |
+
threshold adjustment, target calibration or pooling substitution occurs.
|
| 124 |
+
|
| 125 |
+
`verify` also supports pretraining IDs such as `EP-pt0`; pair classification
|
| 126 |
+
requires a `-ft` classifier. Programmatic `load_model` returns a standard
|
| 127 |
+
`GPT2LMHeadModel` for a pretraining ID, or the complete `TransferClassifier`.
|
| 128 |
+
|
| 129 |
+
The portable example uses **CPU FP32**. The study's held-out scoring used FP32
|
| 130 |
+
weights with CUDA BF16 autocast. These regimes need not produce bitwise-equal
|
| 131 |
+
scores. `cpu_replay_audit.json` checks the portable implementation against the
|
| 132 |
+
original frozen implementation under the same CPU FP32 regime, using one source
|
| 133 |
+
training protein pair and two handwritten English pairs. It does not recompute
|
| 134 |
+
the study's benchmark tables.
|
| 135 |
+
|
| 136 |
+
## Validation and maintenance
|
| 137 |
+
|
| 138 |
+
`portable_core.py` is a byte-identical copy of the original frozen model module
|
| 139 |
+
(SHA-256 `b2362edf8850fe20fbd23cc958a71f92ac2a187de4316f53f8750d3bca857592`).
|
| 140 |
+
`catalog_build_audit.json` records independent file/state/config/finiteness
|
| 141 |
+
verification of all 36 original checkpoints. `test_inference.py` covers file and
|
| 142 |
+
catalog tampering, wrong parent/job/epoch/config, missing or malformed heads,
|
| 143 |
+
nonfinite states, tokenizer tampering, path escapes and endpoint truncation.
|
| 144 |
+
|
| 145 |
+
```bash
|
| 146 |
+
python -m unittest discover -s . -p test_inference.py -v
|
| 147 |
+
```
|
| 148 |
+
|
| 149 |
+
`build_catalog.py` and `validate_cpu_replay.py` are maintainer-only provenance
|
| 150 |
+
tools that take an explicit original workspace root. They are not needed by
|
| 151 |
+
users loading this public package. No weight is copied by the catalog builder.
|
| 152 |
+
|
| 153 |
+
## Data attribution and licensing status
|
| 154 |
+
|
| 155 |
+
The protein inputs derive from UniProtKB/Swiss-Prot with sequence-source
|
| 156 |
+
attribution in the accompanying protein release. English pretraining uses the
|
| 157 |
+
documented OpenWebText selection. The experiment-generated shared BPE vocabulary
|
| 158 |
+
was trained on 16 MiB each of English and protein training text; it is reused from
|
| 159 |
+
the historical rebuilt v2 tokenizer. The tokenizer is not an independently
|
| 160 |
+
trained model for every later holdout. Corpus membership and exposure limitations
|
| 161 |
+
remain those described in the study and data card.
|
| 162 |
+
|
| 163 |
+
**No model-weight license has been assigned in this release.** No license grant
|
| 164 |
+
is inferred from training-data licenses or code provenance. Accordingly, this
|
| 165 |
+
card deliberately omits the Hugging Face `license` metadata field. Public
|
| 166 |
+
availability alone does not establish unrestricted redistribution or commercial
|
| 167 |
+
use rights. Any later license assignment must be a separate documented change.
|
build_catalog.py
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Project original verified artifacts into a public path-independent catalog.
|
| 2 |
+
|
| 3 |
+
Maintainer tool only: no network access and no weight copying. The upload map
|
| 4 |
+
uses workspace-relative source paths and public repository-relative destinations.
|
| 5 |
+
"""
|
| 6 |
+
from __future__ import annotations
|
| 7 |
+
|
| 8 |
+
import argparse
|
| 9 |
+
from datetime import datetime, timezone
|
| 10 |
+
import json
|
| 11 |
+
from pathlib import Path
|
| 12 |
+
import shutil
|
| 13 |
+
|
| 14 |
+
import torch
|
| 15 |
+
|
| 16 |
+
from inference import canonical_sha, file_sha, state_parts, require
|
| 17 |
+
import portable_core as core
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
TRAINING = Path("bio2nl/review/new_data_full_training_v1_2026-10-02")
|
| 21 |
+
ASSETS = Path("release_staging/revision_2026-10-03_v1/source/metadata/models_assets.json")
|
| 22 |
+
TOKENIZER = Path("data_rebuild/2026-10-01-portable-v2/tokenizers/mixed_bpe/tokenizer.json")
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def write(path, value):
|
| 26 |
+
require(not path.exists(), "Refuse to overwrite generated artifact")
|
| 27 |
+
path.write_text(json.dumps(value, indent=2, sort_keys=True, allow_nan=False) + "\n")
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def run(workspace, output):
|
| 31 |
+
workspace, output = Path(workspace).resolve(), Path(output).resolve()
|
| 32 |
+
output.mkdir(exist_ok=True, parents=True)
|
| 33 |
+
require(not (output / "model_catalog.json").exists(), "Catalog already exists")
|
| 34 |
+
assets = json.loads((workspace / ASSETS).read_text())
|
| 35 |
+
selection_path = workspace / TRAINING / "results/source_selection.json"
|
| 36 |
+
selection = json.loads(selection_path.read_text())
|
| 37 |
+
require(file_sha(selection_path) == assets["source_selection_sha256"], "Source selection digest differs")
|
| 38 |
+
require(selection["status"] == "frozen" and selection["conditions_filtered_by_score"] is False,
|
| 39 |
+
"Source selection was not frozen")
|
| 40 |
+
protocol_path = workspace / TRAINING / "protocol.json"
|
| 41 |
+
require(file_sha(protocol_path) == selection["protocol_sha256"], "Training protocol digest differs")
|
| 42 |
+
protocol = json.loads(protocol_path.read_text())
|
| 43 |
+
config = core.make_config(protocol["design"]).to_dict()
|
| 44 |
+
torch.set_num_threads(4)
|
| 45 |
+
selected = {(x["job"]["condition"], x["job"]["pt_seed"], x["job"]["ft_seed"]): x for x in selection["selected"]}
|
| 46 |
+
require(len(selected) == 27 and len(assets["files"]) == 36, "Incomplete model grid")
|
| 47 |
+
tokenizer_file = workspace / TOKENIZER
|
| 48 |
+
tokenizer_sha = file_sha(tokenizer_file)
|
| 49 |
+
require(tokenizer_sha == protocol["design"]["tokenizer"]["sha256"], "Shared tokenizer differs")
|
| 50 |
+
tokenizer_json = json.loads(tokenizer_file.read_text())
|
| 51 |
+
tokens = [x["content"] for x in sorted(tokenizer_json["added_tokens"], key=lambda x: x["id"])]
|
| 52 |
+
require(len(tokens) == 4, "Unexpected tokenizer special tokens")
|
| 53 |
+
catalog = {"schema_version": 1, "release_id": "bio2nl-2026-10-02-models-v1", "model_repository": "dnagpt/bio2nl-models",
|
| 54 |
+
"weight_license_status": "unassigned; no license grant is inferred from code or training-data licenses",
|
| 55 |
+
"training_protocol_sha256": selection["protocol_sha256"], "prepared_manifest_sha256": selection["prepared_manifest_sha256"],
|
| 56 |
+
"source_selection_sha256": file_sha(selection_path), "source_assets_manifest_sha256": file_sha(workspace / ASSETS),
|
| 57 |
+
"frozen_model_implementation_sha256": file_sha(workspace / TRAINING / "code_snapshot/model.py"),
|
| 58 |
+
"config": config, "config_canonical_sha256": canonical_sha(config),
|
| 59 |
+
"conditions": {"EP": "English + natural protein", "ES": "English + residue-shuffled protein", "EE": "English + additional English"},
|
| 60 |
+
"tokenizer": {"path": "tokenizer.json", "sha256": tokenizer_sha, "bytes": tokenizer_file.stat().st_size,
|
| 61 |
+
"vocab_size": 32000, "special_tokens": tokens,
|
| 62 |
+
"training_recipe": "Shared byte-level BPE trained on 16 MiB English and 16 MiB protein training text; historical v2 tokenizer reused"},
|
| 63 |
+
"inference": {"endpoint_cap": 255, "context_length": 512, "format": "a[:255] + [SEP=2] + b[:255] + [EOS=1]",
|
| 64 |
+
"padding": "right, PAD=0", "pooling": "last attention-mask-valid token (EOS)",
|
| 65 |
+
"score_direction": "label 1", "decision": "argmax; ties label 0", "calibration": "none",
|
| 66 |
+
"reference_scoring_precision": "FP32 weights with CUDA BF16 autocast",
|
| 67 |
+
"portable_example_precision": "CPU FP32; exact CUDA BF16 predictions are not promised"},
|
| 68 |
+
"models": []}
|
| 69 |
+
mapping = []
|
| 70 |
+
audit = []
|
| 71 |
+
by_id = {}
|
| 72 |
+
for asset in assets["files"]:
|
| 73 |
+
path = workspace / asset["path"]
|
| 74 |
+
require(path.stat().st_size == asset["bytes"] and file_sha(path) == asset["sha256"], "Original weight digest differs")
|
| 75 |
+
classifier = "ft_seed" in asset
|
| 76 |
+
condition, pt = asset["condition"], asset["pt_seed"]
|
| 77 |
+
model_id = f"{condition}-pt{pt}" + (f"-ft{asset['ft_seed']}" if classifier else "")
|
| 78 |
+
remote = f"checkpoints/source/{condition}/pt{pt}/ft{asset['ft_seed']}/best.pt" if classifier else f"checkpoints/pretrain/{condition}/pt{pt}/model.pt"
|
| 79 |
+
meta_path = path.parent / "metadata.json"
|
| 80 |
+
meta = json.loads(meta_path.read_text())
|
| 81 |
+
require(meta["status"] == "completed" and meta["run_kind"] == "full", "Incomplete original run")
|
| 82 |
+
payload = torch.load(path, map_location="cpu", weights_only=True, mmap=True)
|
| 83 |
+
kind = "source_classifier" if classifier else "causal_lm"
|
| 84 |
+
job = {"condition": condition, "pt_seed": pt, "smoke": False}
|
| 85 |
+
if classifier:
|
| 86 |
+
job["ft_seed"] = asset["ft_seed"]
|
| 87 |
+
require(payload["schema_version"] == 1 and payload["kind"] == kind and payload["metadata"]["job"] == job,
|
| 88 |
+
"Original checkpoint identity differs")
|
| 89 |
+
require(payload["metadata"]["protocol_sha256"] == selection["protocol_sha256"] and
|
| 90 |
+
payload["metadata"]["prepared_manifest_sha256"] == selection["prepared_manifest_sha256"], "Original provenance differs")
|
| 91 |
+
require(canonical_sha(payload["config"]) == canonical_sha(config), "Original complete config differs")
|
| 92 |
+
state = payload["state_dict"]
|
| 93 |
+
require(all(x.dtype == torch.float32 and torch.isfinite(x).all() for x in state.values()), "Invalid weight tensor")
|
| 94 |
+
digest = core.state_digest(state)
|
| 95 |
+
require(digest == payload["state_sha256"] == meta["checkpoint"]["state_sha256"], "Original state digest differs")
|
| 96 |
+
backbone, head = state_parts(state, kind)
|
| 97 |
+
entry = {"id": model_id, "kind": kind, "job": job,
|
| 98 |
+
"checkpoint": {"path": remote, "sha256": asset["sha256"], "bytes": asset["bytes"]},
|
| 99 |
+
"state_sha256": digest, "state_tensor_count": len(state), "backbone_state_sha256": backbone,
|
| 100 |
+
"head_state_sha256": head, "config_sha256": canonical_sha(config), "tokenizer_sha256": tokenizer_sha,
|
| 101 |
+
"training_result_sha256": file_sha(meta_path),
|
| 102 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)" if classifier else "tied 32000 x 768 language-model output embedding"}
|
| 103 |
+
if classifier:
|
| 104 |
+
chosen = selected[(condition, pt, asset["ft_seed"])]
|
| 105 |
+
require(chosen["checkpoint"]["sha256"] == asset["sha256"] and chosen["checkpoint"]["state_sha256"] == digest and
|
| 106 |
+
chosen["source_result"]["sha256"] == file_sha(meta_path), "Frozen selection differs")
|
| 107 |
+
require(payload["metadata"]["epoch"] == chosen["best_epoch"] == asset["best_epoch"] == meta["best_epoch"], "Selected epoch differs")
|
| 108 |
+
parent = by_id[f"{condition}-pt{pt}"]
|
| 109 |
+
require(meta["pretraining_checkpoint"]["sha256"] == parent["checkpoint"]["sha256"] and
|
| 110 |
+
meta["pretraining_checkpoint"]["state_sha256"] == parent["state_sha256"] and
|
| 111 |
+
meta["new_parent_backbone_exactly_inherited"] is True, "Parent link differs")
|
| 112 |
+
require(tuple(state["score.weight"].shape) == (2, 768), "Original classifier head differs")
|
| 113 |
+
entry.update(selected_epoch=chosen["best_epoch"], selection="minimum source validation CE; ties earlier epoch",
|
| 114 |
+
pretraining_parent={"id": parent["id"], "sha256": parent["checkpoint"]["sha256"], "state_sha256": parent["state_sha256"]})
|
| 115 |
+
else:
|
| 116 |
+
require(torch.equal(state["lm_head.weight"], state["transformer.wte.weight"]), "LM tied aliases differ")
|
| 117 |
+
entry.update(pretraining_steps=meta["updates"], input_tokens=meta["input_tokens"])
|
| 118 |
+
catalog["models"].append(entry)
|
| 119 |
+
by_id[model_id] = entry
|
| 120 |
+
mapping.append({"source_relative": asset["path"], "path_in_repo": remote, "sha256": asset["sha256"], "bytes": asset["bytes"]})
|
| 121 |
+
audit.append({"id": model_id, "file_verified": True, "state_verified": True, "config_verified": True,
|
| 122 |
+
"finite_fp32": True, "source_selection_verified": classifier, "tensor_count": len(state)})
|
| 123 |
+
del payload, state
|
| 124 |
+
print("verified", model_id, flush=True)
|
| 125 |
+
shutil.copyfile(tokenizer_file, output / "tokenizer.json")
|
| 126 |
+
write(output / "config.json", config)
|
| 127 |
+
write(output / "model_catalog.json", catalog)
|
| 128 |
+
write(output / "upload_mapping.json", {"schema_version": 1, "model_repository": "dnagpt/bio2nl-models", "repo_type": "model",
|
| 129 |
+
"scope": "Existing original weights; no second weight copy; package support files added separately", "weights": mapping})
|
| 130 |
+
write(output / "catalog_build_audit.json", {"status": "passed", "completed_at_utc": datetime.now(timezone.utc).isoformat(),
|
| 131 |
+
"models": audit, "weight_files": len(mapping), "weight_bytes": sum(x["bytes"] for x in mapping),
|
| 132 |
+
"catalog_sha256": file_sha(output / "model_catalog.json"), "weight_files_copied": 0,
|
| 133 |
+
"trained_or_scored_benchmarks": False, "gpu_used": False})
|
| 134 |
+
|
| 135 |
+
|
| 136 |
+
if __name__ == "__main__":
|
| 137 |
+
parser = argparse.ArgumentParser(description=__doc__)
|
| 138 |
+
parser.add_argument("--workspace", type=Path, required=True)
|
| 139 |
+
parser.add_argument("--output", type=Path, required=True)
|
| 140 |
+
args = parser.parse_args()
|
| 141 |
+
run(args.workspace, args.output)
|
catalog_build_audit.json
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"catalog_sha256": "5f6694f206084ad51dcc27c1485c4b4d000ffe5023310482aab367d0815df067",
|
| 3 |
+
"completed_at_utc": "2026-10-03T08:13:32.395981+00:00",
|
| 4 |
+
"gpu_used": false,
|
| 5 |
+
"models": [
|
| 6 |
+
{
|
| 7 |
+
"config_verified": true,
|
| 8 |
+
"file_verified": true,
|
| 9 |
+
"finite_fp32": true,
|
| 10 |
+
"id": "EP-pt0",
|
| 11 |
+
"source_selection_verified": false,
|
| 12 |
+
"state_verified": true,
|
| 13 |
+
"tensor_count": 149
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"config_verified": true,
|
| 17 |
+
"file_verified": true,
|
| 18 |
+
"finite_fp32": true,
|
| 19 |
+
"id": "EP-pt1",
|
| 20 |
+
"source_selection_verified": false,
|
| 21 |
+
"state_verified": true,
|
| 22 |
+
"tensor_count": 149
|
| 23 |
+
},
|
| 24 |
+
{
|
| 25 |
+
"config_verified": true,
|
| 26 |
+
"file_verified": true,
|
| 27 |
+
"finite_fp32": true,
|
| 28 |
+
"id": "EP-pt2",
|
| 29 |
+
"source_selection_verified": false,
|
| 30 |
+
"state_verified": true,
|
| 31 |
+
"tensor_count": 149
|
| 32 |
+
},
|
| 33 |
+
{
|
| 34 |
+
"config_verified": true,
|
| 35 |
+
"file_verified": true,
|
| 36 |
+
"finite_fp32": true,
|
| 37 |
+
"id": "ES-pt0",
|
| 38 |
+
"source_selection_verified": false,
|
| 39 |
+
"state_verified": true,
|
| 40 |
+
"tensor_count": 149
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"config_verified": true,
|
| 44 |
+
"file_verified": true,
|
| 45 |
+
"finite_fp32": true,
|
| 46 |
+
"id": "ES-pt1",
|
| 47 |
+
"source_selection_verified": false,
|
| 48 |
+
"state_verified": true,
|
| 49 |
+
"tensor_count": 149
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"config_verified": true,
|
| 53 |
+
"file_verified": true,
|
| 54 |
+
"finite_fp32": true,
|
| 55 |
+
"id": "ES-pt2",
|
| 56 |
+
"source_selection_verified": false,
|
| 57 |
+
"state_verified": true,
|
| 58 |
+
"tensor_count": 149
|
| 59 |
+
},
|
| 60 |
+
{
|
| 61 |
+
"config_verified": true,
|
| 62 |
+
"file_verified": true,
|
| 63 |
+
"finite_fp32": true,
|
| 64 |
+
"id": "EE-pt0",
|
| 65 |
+
"source_selection_verified": false,
|
| 66 |
+
"state_verified": true,
|
| 67 |
+
"tensor_count": 149
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"config_verified": true,
|
| 71 |
+
"file_verified": true,
|
| 72 |
+
"finite_fp32": true,
|
| 73 |
+
"id": "EE-pt1",
|
| 74 |
+
"source_selection_verified": false,
|
| 75 |
+
"state_verified": true,
|
| 76 |
+
"tensor_count": 149
|
| 77 |
+
},
|
| 78 |
+
{
|
| 79 |
+
"config_verified": true,
|
| 80 |
+
"file_verified": true,
|
| 81 |
+
"finite_fp32": true,
|
| 82 |
+
"id": "EE-pt2",
|
| 83 |
+
"source_selection_verified": false,
|
| 84 |
+
"state_verified": true,
|
| 85 |
+
"tensor_count": 149
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"config_verified": true,
|
| 89 |
+
"file_verified": true,
|
| 90 |
+
"finite_fp32": true,
|
| 91 |
+
"id": "EP-pt0-ft0",
|
| 92 |
+
"source_selection_verified": true,
|
| 93 |
+
"state_verified": true,
|
| 94 |
+
"tensor_count": 149
|
| 95 |
+
},
|
| 96 |
+
{
|
| 97 |
+
"config_verified": true,
|
| 98 |
+
"file_verified": true,
|
| 99 |
+
"finite_fp32": true,
|
| 100 |
+
"id": "EP-pt0-ft1",
|
| 101 |
+
"source_selection_verified": true,
|
| 102 |
+
"state_verified": true,
|
| 103 |
+
"tensor_count": 149
|
| 104 |
+
},
|
| 105 |
+
{
|
| 106 |
+
"config_verified": true,
|
| 107 |
+
"file_verified": true,
|
| 108 |
+
"finite_fp32": true,
|
| 109 |
+
"id": "EP-pt0-ft2",
|
| 110 |
+
"source_selection_verified": true,
|
| 111 |
+
"state_verified": true,
|
| 112 |
+
"tensor_count": 149
|
| 113 |
+
},
|
| 114 |
+
{
|
| 115 |
+
"config_verified": true,
|
| 116 |
+
"file_verified": true,
|
| 117 |
+
"finite_fp32": true,
|
| 118 |
+
"id": "ES-pt0-ft0",
|
| 119 |
+
"source_selection_verified": true,
|
| 120 |
+
"state_verified": true,
|
| 121 |
+
"tensor_count": 149
|
| 122 |
+
},
|
| 123 |
+
{
|
| 124 |
+
"config_verified": true,
|
| 125 |
+
"file_verified": true,
|
| 126 |
+
"finite_fp32": true,
|
| 127 |
+
"id": "ES-pt0-ft1",
|
| 128 |
+
"source_selection_verified": true,
|
| 129 |
+
"state_verified": true,
|
| 130 |
+
"tensor_count": 149
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"config_verified": true,
|
| 134 |
+
"file_verified": true,
|
| 135 |
+
"finite_fp32": true,
|
| 136 |
+
"id": "ES-pt0-ft2",
|
| 137 |
+
"source_selection_verified": true,
|
| 138 |
+
"state_verified": true,
|
| 139 |
+
"tensor_count": 149
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"config_verified": true,
|
| 143 |
+
"file_verified": true,
|
| 144 |
+
"finite_fp32": true,
|
| 145 |
+
"id": "EE-pt0-ft0",
|
| 146 |
+
"source_selection_verified": true,
|
| 147 |
+
"state_verified": true,
|
| 148 |
+
"tensor_count": 149
|
| 149 |
+
},
|
| 150 |
+
{
|
| 151 |
+
"config_verified": true,
|
| 152 |
+
"file_verified": true,
|
| 153 |
+
"finite_fp32": true,
|
| 154 |
+
"id": "EE-pt0-ft1",
|
| 155 |
+
"source_selection_verified": true,
|
| 156 |
+
"state_verified": true,
|
| 157 |
+
"tensor_count": 149
|
| 158 |
+
},
|
| 159 |
+
{
|
| 160 |
+
"config_verified": true,
|
| 161 |
+
"file_verified": true,
|
| 162 |
+
"finite_fp32": true,
|
| 163 |
+
"id": "EE-pt0-ft2",
|
| 164 |
+
"source_selection_verified": true,
|
| 165 |
+
"state_verified": true,
|
| 166 |
+
"tensor_count": 149
|
| 167 |
+
},
|
| 168 |
+
{
|
| 169 |
+
"config_verified": true,
|
| 170 |
+
"file_verified": true,
|
| 171 |
+
"finite_fp32": true,
|
| 172 |
+
"id": "EP-pt1-ft0",
|
| 173 |
+
"source_selection_verified": true,
|
| 174 |
+
"state_verified": true,
|
| 175 |
+
"tensor_count": 149
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"config_verified": true,
|
| 179 |
+
"file_verified": true,
|
| 180 |
+
"finite_fp32": true,
|
| 181 |
+
"id": "EP-pt1-ft1",
|
| 182 |
+
"source_selection_verified": true,
|
| 183 |
+
"state_verified": true,
|
| 184 |
+
"tensor_count": 149
|
| 185 |
+
},
|
| 186 |
+
{
|
| 187 |
+
"config_verified": true,
|
| 188 |
+
"file_verified": true,
|
| 189 |
+
"finite_fp32": true,
|
| 190 |
+
"id": "EP-pt1-ft2",
|
| 191 |
+
"source_selection_verified": true,
|
| 192 |
+
"state_verified": true,
|
| 193 |
+
"tensor_count": 149
|
| 194 |
+
},
|
| 195 |
+
{
|
| 196 |
+
"config_verified": true,
|
| 197 |
+
"file_verified": true,
|
| 198 |
+
"finite_fp32": true,
|
| 199 |
+
"id": "ES-pt1-ft0",
|
| 200 |
+
"source_selection_verified": true,
|
| 201 |
+
"state_verified": true,
|
| 202 |
+
"tensor_count": 149
|
| 203 |
+
},
|
| 204 |
+
{
|
| 205 |
+
"config_verified": true,
|
| 206 |
+
"file_verified": true,
|
| 207 |
+
"finite_fp32": true,
|
| 208 |
+
"id": "ES-pt1-ft1",
|
| 209 |
+
"source_selection_verified": true,
|
| 210 |
+
"state_verified": true,
|
| 211 |
+
"tensor_count": 149
|
| 212 |
+
},
|
| 213 |
+
{
|
| 214 |
+
"config_verified": true,
|
| 215 |
+
"file_verified": true,
|
| 216 |
+
"finite_fp32": true,
|
| 217 |
+
"id": "ES-pt1-ft2",
|
| 218 |
+
"source_selection_verified": true,
|
| 219 |
+
"state_verified": true,
|
| 220 |
+
"tensor_count": 149
|
| 221 |
+
},
|
| 222 |
+
{
|
| 223 |
+
"config_verified": true,
|
| 224 |
+
"file_verified": true,
|
| 225 |
+
"finite_fp32": true,
|
| 226 |
+
"id": "EE-pt1-ft0",
|
| 227 |
+
"source_selection_verified": true,
|
| 228 |
+
"state_verified": true,
|
| 229 |
+
"tensor_count": 149
|
| 230 |
+
},
|
| 231 |
+
{
|
| 232 |
+
"config_verified": true,
|
| 233 |
+
"file_verified": true,
|
| 234 |
+
"finite_fp32": true,
|
| 235 |
+
"id": "EE-pt1-ft1",
|
| 236 |
+
"source_selection_verified": true,
|
| 237 |
+
"state_verified": true,
|
| 238 |
+
"tensor_count": 149
|
| 239 |
+
},
|
| 240 |
+
{
|
| 241 |
+
"config_verified": true,
|
| 242 |
+
"file_verified": true,
|
| 243 |
+
"finite_fp32": true,
|
| 244 |
+
"id": "EE-pt1-ft2",
|
| 245 |
+
"source_selection_verified": true,
|
| 246 |
+
"state_verified": true,
|
| 247 |
+
"tensor_count": 149
|
| 248 |
+
},
|
| 249 |
+
{
|
| 250 |
+
"config_verified": true,
|
| 251 |
+
"file_verified": true,
|
| 252 |
+
"finite_fp32": true,
|
| 253 |
+
"id": "EP-pt2-ft0",
|
| 254 |
+
"source_selection_verified": true,
|
| 255 |
+
"state_verified": true,
|
| 256 |
+
"tensor_count": 149
|
| 257 |
+
},
|
| 258 |
+
{
|
| 259 |
+
"config_verified": true,
|
| 260 |
+
"file_verified": true,
|
| 261 |
+
"finite_fp32": true,
|
| 262 |
+
"id": "EP-pt2-ft1",
|
| 263 |
+
"source_selection_verified": true,
|
| 264 |
+
"state_verified": true,
|
| 265 |
+
"tensor_count": 149
|
| 266 |
+
},
|
| 267 |
+
{
|
| 268 |
+
"config_verified": true,
|
| 269 |
+
"file_verified": true,
|
| 270 |
+
"finite_fp32": true,
|
| 271 |
+
"id": "EP-pt2-ft2",
|
| 272 |
+
"source_selection_verified": true,
|
| 273 |
+
"state_verified": true,
|
| 274 |
+
"tensor_count": 149
|
| 275 |
+
},
|
| 276 |
+
{
|
| 277 |
+
"config_verified": true,
|
| 278 |
+
"file_verified": true,
|
| 279 |
+
"finite_fp32": true,
|
| 280 |
+
"id": "ES-pt2-ft0",
|
| 281 |
+
"source_selection_verified": true,
|
| 282 |
+
"state_verified": true,
|
| 283 |
+
"tensor_count": 149
|
| 284 |
+
},
|
| 285 |
+
{
|
| 286 |
+
"config_verified": true,
|
| 287 |
+
"file_verified": true,
|
| 288 |
+
"finite_fp32": true,
|
| 289 |
+
"id": "ES-pt2-ft1",
|
| 290 |
+
"source_selection_verified": true,
|
| 291 |
+
"state_verified": true,
|
| 292 |
+
"tensor_count": 149
|
| 293 |
+
},
|
| 294 |
+
{
|
| 295 |
+
"config_verified": true,
|
| 296 |
+
"file_verified": true,
|
| 297 |
+
"finite_fp32": true,
|
| 298 |
+
"id": "ES-pt2-ft2",
|
| 299 |
+
"source_selection_verified": true,
|
| 300 |
+
"state_verified": true,
|
| 301 |
+
"tensor_count": 149
|
| 302 |
+
},
|
| 303 |
+
{
|
| 304 |
+
"config_verified": true,
|
| 305 |
+
"file_verified": true,
|
| 306 |
+
"finite_fp32": true,
|
| 307 |
+
"id": "EE-pt2-ft0",
|
| 308 |
+
"source_selection_verified": true,
|
| 309 |
+
"state_verified": true,
|
| 310 |
+
"tensor_count": 149
|
| 311 |
+
},
|
| 312 |
+
{
|
| 313 |
+
"config_verified": true,
|
| 314 |
+
"file_verified": true,
|
| 315 |
+
"finite_fp32": true,
|
| 316 |
+
"id": "EE-pt2-ft1",
|
| 317 |
+
"source_selection_verified": true,
|
| 318 |
+
"state_verified": true,
|
| 319 |
+
"tensor_count": 149
|
| 320 |
+
},
|
| 321 |
+
{
|
| 322 |
+
"config_verified": true,
|
| 323 |
+
"file_verified": true,
|
| 324 |
+
"finite_fp32": true,
|
| 325 |
+
"id": "EE-pt2-ft2",
|
| 326 |
+
"source_selection_verified": true,
|
| 327 |
+
"state_verified": true,
|
| 328 |
+
"tensor_count": 149
|
| 329 |
+
}
|
| 330 |
+
],
|
| 331 |
+
"status": "passed",
|
| 332 |
+
"trained_or_scored_benchmarks": false,
|
| 333 |
+
"weight_bytes": 15845506290,
|
| 334 |
+
"weight_files": 36,
|
| 335 |
+
"weight_files_copied": 0
|
| 336 |
+
}
|
checkpoints/pretrain/EE/pt0/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5af7730f436af372a0d43bfed57f87a3ea2e6aa4826493aa21eacd3acdd4dccc
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/EE/pt1/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:653a88903ee373e5b8933c71d386a64ca6840249f9a42cc2c992b0202f04739f
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/EE/pt2/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:68e49c6af5cb3fa34b1820925cb1751055c38c25de8122b5ba19a40937ad0ba9
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/EP/pt0/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:f6d44eb163960891e8af7d4f701580c852534f3ab476d9b6c281903f3c329327
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/EP/pt1/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:09c034afc616d6ed529fe62af1c604a07e0bc64a32f58630908300caf250c44a
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/EP/pt2/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a1285feb6eb6380bfedfe670a27e9f09b19163b33f76145cc008de0b1e223155
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/ES/pt0/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:452c6178f682ae50e53c8df1311134e188c99d2fcce7805f0d65d379910f277d
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/ES/pt1/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2f357c92c20c633a636f936246bfeadec31a9ee8792bfcaef1db2acf3ee1a737
|
| 3 |
+
size 440148490
|
checkpoints/pretrain/ES/pt2/model.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:e954373b086d2d3fe3b015440a185f4a146e01825007bc57cbcc609ed3d30254
|
| 3 |
+
size 440148490
|
checkpoints/source/EE/pt0/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c1aa8820704665541550d7f59fed367c30dcc55b60c90f4ea2dcec75dce4103e
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt0/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2a3ac91f4392196e836221e0435388b0e6ecae6c117be26f2b43de3e6507c4a1
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt0/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:22d6e120e8f24fb5b0bb15bcb2d463733dea39d6599ed0234841cb9ff47f2ee1
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt1/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7e75b5380df75393dae4a125df812f6500288955ab92a20ef610eb15eaff646f
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt1/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c869b1c0c8cf4288485936795fbb8263b5af55bc39fa9df0513758c5cbfd5a87
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt1/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0db9423ef969016260d1ddbbf700d5bbc71340b6847e0c8ecf5e4696fa2bb732
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt2/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:92946799e5a378609b6dae042db4c263e53fd8123f101102a3e50b1c8a694b1a
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt2/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:3879fab3b33328347f852ac813bbc194be808526b4b97b1613292126b56f7751
|
| 3 |
+
size 440154440
|
checkpoints/source/EE/pt2/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c2fcac930e4a69d8138dc508ca4471f52be6ce76c8a90efd819b0780f73225b5
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt0/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:574117f9bbbaa589a0f1fd726567ead899510c05bcbcc0cbf71e3b57c72edebb
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt0/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a5c9522ed086bb54ce62ca74717c130143cfe07352b07a698529f1bedb497b6c
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt0/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:19277d64bb879906e98df99d1c77623c46d8ccad2c33eda796ba1b9bcd4cf3b5
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt1/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1a4e205e237b684cc14b79aea27a59ba45adb68e3e2ee0d345a7476433d88e3c
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt1/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2e3ad2344834e5a70403bbef8c19f55aacb6b25b83725138bb82e2274723797c
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt1/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:47615a93378959abbe6ffaf3475a6561ec9c6d11a94a04da6954b6801994704e
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt2/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:7ecaeba8d20e8f65b78a11412817da9cdaf84127c03765c1fb95a44442f921f4
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt2/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:34c588c5e10d7ba6c6320cc59cf883ad47465cdcf9a07d540a45e55720e993eb
|
| 3 |
+
size 440154440
|
checkpoints/source/EP/pt2/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c1af8f442b9e13944e2bb5158900c2f1ca824af7583ebcb5a365d6b6317cdd3f
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt0/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:69069d19cade14739612d991743be14f3debe97e8c8cf48379810bed1498e913
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt0/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bde6f1f919b7f5657edb0edb920941df3db8a88dd44089acd05b6b89c29c19be
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt0/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ec82de031e16af6005b1221327e6b58f9b8d1dc8f1a0072325a33453575b3b51
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt1/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b24e6de1f73186bc5167afce790c5794dd109f1d077fde1dc207ff4c360bed5c
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt1/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d43962d06f256000a8707dbc61e3d860dcebd4d50e0ac77b724ef921a79aae2c
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt1/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:fe879c8b4f45a84e08d728affc2c4cd6d28fb87b92cc8759b4ddc408f786d8f9
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt2/ft0/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:4e3193aba5334d7c1093a156b8dc72b3690ac3cce149373c7aa01958e2dceb73
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt2/ft1/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:5509eb7ac7f77b3378874e9f5ceb2d51176ff1b175edaec8bd86449596335c48
|
| 3 |
+
size 440154440
|
checkpoints/source/ES/pt2/ft2/best.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:bbe4ea6d3953fb9c4e954952c7deb3cbbfde9ad102de1c797fcb35333e4e41e5
|
| 3 |
+
size 440154440
|
config.json
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"_name_or_path": "",
|
| 3 |
+
"activation_function": "gelu_new",
|
| 4 |
+
"add_cross_attention": false,
|
| 5 |
+
"architectures": null,
|
| 6 |
+
"attn_pdrop": 0.1,
|
| 7 |
+
"bad_words_ids": null,
|
| 8 |
+
"begin_suppress_tokens": null,
|
| 9 |
+
"bos_token_id": 1,
|
| 10 |
+
"chunk_size_feed_forward": 0,
|
| 11 |
+
"cross_attention_hidden_size": null,
|
| 12 |
+
"decoder_start_token_id": null,
|
| 13 |
+
"diversity_penalty": 0.0,
|
| 14 |
+
"do_sample": false,
|
| 15 |
+
"early_stopping": false,
|
| 16 |
+
"embd_pdrop": 0.1,
|
| 17 |
+
"encoder_no_repeat_ngram_size": 0,
|
| 18 |
+
"eos_token_id": 1,
|
| 19 |
+
"exponential_decay_length_penalty": null,
|
| 20 |
+
"finetuning_task": null,
|
| 21 |
+
"forced_bos_token_id": null,
|
| 22 |
+
"forced_eos_token_id": null,
|
| 23 |
+
"id2label": {
|
| 24 |
+
"0": "LABEL_0",
|
| 25 |
+
"1": "LABEL_1"
|
| 26 |
+
},
|
| 27 |
+
"initializer_range": 0.02,
|
| 28 |
+
"is_decoder": false,
|
| 29 |
+
"is_encoder_decoder": false,
|
| 30 |
+
"label2id": {
|
| 31 |
+
"LABEL_0": 0,
|
| 32 |
+
"LABEL_1": 1
|
| 33 |
+
},
|
| 34 |
+
"layer_norm_epsilon": 1e-05,
|
| 35 |
+
"length_penalty": 1.0,
|
| 36 |
+
"max_length": 20,
|
| 37 |
+
"min_length": 0,
|
| 38 |
+
"model_type": "gpt2",
|
| 39 |
+
"n_ctx": 512,
|
| 40 |
+
"n_embd": 768,
|
| 41 |
+
"n_head": 12,
|
| 42 |
+
"n_inner": 3072,
|
| 43 |
+
"n_layer": 12,
|
| 44 |
+
"n_positions": 512,
|
| 45 |
+
"no_repeat_ngram_size": 0,
|
| 46 |
+
"num_beam_groups": 1,
|
| 47 |
+
"num_beams": 1,
|
| 48 |
+
"num_return_sequences": 1,
|
| 49 |
+
"output_attentions": false,
|
| 50 |
+
"output_hidden_states": false,
|
| 51 |
+
"output_scores": false,
|
| 52 |
+
"pad_token_id": 0,
|
| 53 |
+
"prefix": null,
|
| 54 |
+
"problem_type": null,
|
| 55 |
+
"pruned_heads": {},
|
| 56 |
+
"remove_invalid_values": false,
|
| 57 |
+
"reorder_and_upcast_attn": false,
|
| 58 |
+
"repetition_penalty": 1.0,
|
| 59 |
+
"resid_pdrop": 0.1,
|
| 60 |
+
"return_dict": true,
|
| 61 |
+
"return_dict_in_generate": false,
|
| 62 |
+
"scale_attn_by_inverse_layer_idx": false,
|
| 63 |
+
"scale_attn_weights": true,
|
| 64 |
+
"sep_token_id": null,
|
| 65 |
+
"summary_activation": null,
|
| 66 |
+
"summary_first_dropout": 0.1,
|
| 67 |
+
"summary_proj_to_labels": true,
|
| 68 |
+
"summary_type": "cls_index",
|
| 69 |
+
"summary_use_proj": true,
|
| 70 |
+
"suppress_tokens": null,
|
| 71 |
+
"task_specific_params": null,
|
| 72 |
+
"temperature": 1.0,
|
| 73 |
+
"tf_legacy_loss": false,
|
| 74 |
+
"tie_encoder_decoder": false,
|
| 75 |
+
"tie_word_embeddings": true,
|
| 76 |
+
"tokenizer_class": null,
|
| 77 |
+
"top_k": 50,
|
| 78 |
+
"top_p": 1.0,
|
| 79 |
+
"torch_dtype": null,
|
| 80 |
+
"torchscript": false,
|
| 81 |
+
"transformers_version": "4.45.2",
|
| 82 |
+
"typical_p": 1.0,
|
| 83 |
+
"use_bfloat16": false,
|
| 84 |
+
"use_cache": false,
|
| 85 |
+
"vocab_size": 32000
|
| 86 |
+
}
|
cpu_replay_audit.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"all_encodings_exact": true,
|
| 3 |
+
"batch_size_1_vs_3_max_abs_log_probability_difference": 1.1920928955078125e-07,
|
| 4 |
+
"benchmark_scores_computed": false,
|
| 5 |
+
"catalog_sha256": "5f6694f206084ad51dcc27c1485c4b4d000ffe5023310482aab367d0815df067",
|
| 6 |
+
"classifier_id": "EP-pt0-ft0",
|
| 7 |
+
"classifier_max_abs_log_probability_difference": 0.0,
|
| 8 |
+
"classifier_predictions_exact": true,
|
| 9 |
+
"code_sha256": {
|
| 10 |
+
"inference.py": "43f5a1c770354b588b046ff02e4d03df4c13086224df4fba1285f8f2b3cf91ec",
|
| 11 |
+
"portable_core.py": "b2362edf8850fe20fbd23cc958a71f92ac2a187de4316f53f8750d3bca857592",
|
| 12 |
+
"validate_cpu_replay.py": "c8d232a6a386b6ce2a1d204887c0d582cd12d90b7988ed315158f1ed141f8ac4"
|
| 13 |
+
},
|
| 14 |
+
"completed_at_utc": "2026-10-03T08:22:48.747609+00:00",
|
| 15 |
+
"cpu_threads": 4,
|
| 16 |
+
"device": "cpu",
|
| 17 |
+
"examples": {
|
| 18 |
+
"handwritten_english_pairs": 2,
|
| 19 |
+
"source_training_protein_pairs": 1,
|
| 20 |
+
"source_training_row_id": "a4478a3375338815d4abef8adc599c5dd44affd5a4265ebb2a350890b8327e81"
|
| 21 |
+
},
|
| 22 |
+
"fixed_batch_padding_tolerance": 1e-05,
|
| 23 |
+
"gpu_used": false,
|
| 24 |
+
"limitation": "CPU FP32 replay validates portable loading/encoding. It does not promise bitwise equality with prior CUDA BF16 benchmark predictions.",
|
| 25 |
+
"optimizer_updates": 0,
|
| 26 |
+
"original_training_first_row_input_exact": true,
|
| 27 |
+
"portable_core_sha256": "b2362edf8850fe20fbd23cc958a71f92ac2a187de4316f53f8750d3bca857592",
|
| 28 |
+
"precision": "float32",
|
| 29 |
+
"pretraining_id": "EP-pt0",
|
| 30 |
+
"pretraining_max_abs_logit_difference": 0.0,
|
| 31 |
+
"reference_encoding_code_sha256": "c3e2f213da25ca7576a2875f77b33c9fa50b4ffc670a11c402d407708c9ee5bc",
|
| 32 |
+
"reference_model_code_sha256": "b2362edf8850fe20fbd23cc958a71f92ac2a187de4316f53f8750d3bca857592",
|
| 33 |
+
"status": "passed"
|
| 34 |
+
}
|
example_pairs.json
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"sentence1": "A small bird sits beside the window.",
|
| 4 |
+
"sentence2": "A bird is sitting next to a window."
|
| 5 |
+
},
|
| 6 |
+
{
|
| 7 |
+
"sentence1": "The protein sequence is an experimental input.",
|
| 8 |
+
"sentence2": "The train leaves at noon."
|
| 9 |
+
}
|
| 10 |
+
]
|
inference.py
ADDED
|
@@ -0,0 +1,213 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Offline CPU inference with independently pinned model catalog and artifacts.
|
| 2 |
+
|
| 3 |
+
No downloads, training, benchmark scoring or workspace-dependent imports occur.
|
| 4 |
+
The catalog digest must be obtained from a trusted release, not from a changed
|
| 5 |
+
local catalog. Checkpoints are the original complete weights-only PyTorch files.
|
| 6 |
+
"""
|
| 7 |
+
from __future__ import annotations
|
| 8 |
+
|
| 9 |
+
import argparse
|
| 10 |
+
import hashlib
|
| 11 |
+
import json
|
| 12 |
+
from pathlib import Path, PurePosixPath
|
| 13 |
+
import re
|
| 14 |
+
|
| 15 |
+
import numpy as np
|
| 16 |
+
import torch
|
| 17 |
+
from tokenizers import Tokenizer
|
| 18 |
+
|
| 19 |
+
import portable_core as core
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
def require(ok, message):
|
| 23 |
+
if not ok:
|
| 24 |
+
raise ValueError(message)
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
def canonical_sha(value):
|
| 28 |
+
return hashlib.sha256(json.dumps(value, sort_keys=True, separators=(",", ":"), allow_nan=False).encode()).hexdigest()
|
| 29 |
+
|
| 30 |
+
|
| 31 |
+
def file_sha(path):
|
| 32 |
+
with Path(path).open("rb") as stream:
|
| 33 |
+
return hashlib.file_digest(stream, "sha256").hexdigest()
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def safe_path(root, relative):
|
| 37 |
+
require(isinstance(relative, str) and relative and "\\" not in relative and "\0" not in relative,
|
| 38 |
+
"Invalid artifact path")
|
| 39 |
+
item = PurePosixPath(relative)
|
| 40 |
+
require(not item.is_absolute() and str(item) == relative and not any(x in ("", ".", "..") for x in item.parts),
|
| 41 |
+
"Artifact path must be canonical and relative")
|
| 42 |
+
root = Path(root).resolve()
|
| 43 |
+
target = (root / relative).resolve()
|
| 44 |
+
require(target.is_relative_to(root), "Artifact escapes artifact root")
|
| 45 |
+
return target
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
def verify_file(path, descriptor):
|
| 49 |
+
require(Path(path).is_file() and Path(path).stat().st_size == descriptor["bytes"], "Artifact size differs")
|
| 50 |
+
require(file_sha(path) == descriptor["sha256"], "Artifact SHA-256 differs")
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def read_catalog(path, expected_sha256):
|
| 54 |
+
require(isinstance(expected_sha256, str) and re.fullmatch(r"[0-9a-f]{64}", expected_sha256),
|
| 55 |
+
"Trusted catalog SHA-256 is required")
|
| 56 |
+
raw = Path(path).read_bytes()
|
| 57 |
+
require(hashlib.sha256(raw).hexdigest() == expected_sha256, "Catalog SHA-256 differs")
|
| 58 |
+
catalog = json.loads(raw)
|
| 59 |
+
require(catalog.get("schema_version") == 1 and catalog.get("release_id") == "bio2nl-2026-10-02-models-v1",
|
| 60 |
+
"Unknown model catalog")
|
| 61 |
+
entries = catalog["models"]
|
| 62 |
+
expected = {f"{c}-pt{p}" for c in ("EP", "ES", "EE") for p in range(3)}
|
| 63 |
+
expected |= {f"{c}-pt{p}-ft{f}" for c in ("EP", "ES", "EE") for p in range(3) for f in range(3)}
|
| 64 |
+
require(len(entries) == 36 and len({x["id"] for x in entries}) == 36 and {x["id"] for x in entries} == expected,
|
| 65 |
+
"Catalog model grid differs")
|
| 66 |
+
for entry in entries:
|
| 67 |
+
require(entry["config_sha256"] == canonical_sha(catalog["config"]), "Config identity differs")
|
| 68 |
+
require(entry["tokenizer_sha256"] == catalog["tokenizer"]["sha256"], "Tokenizer identity differs")
|
| 69 |
+
job = entry["job"]
|
| 70 |
+
classifier = entry["kind"] == "source_classifier"
|
| 71 |
+
require(entry["kind"] in ("causal_lm", "source_classifier") and job.get("smoke") is False,
|
| 72 |
+
"Unexpected checkpoint kind/job")
|
| 73 |
+
suffix = f"-ft{job['ft_seed']}" if classifier else ""
|
| 74 |
+
require(entry["id"] == f"{job['condition']}-pt{job['pt_seed']}" + suffix, "Model/job identity differs")
|
| 75 |
+
if classifier:
|
| 76 |
+
parents = [p for p in entries if p["id"] == entry["pretraining_parent"]["id"]]
|
| 77 |
+
require(len(parents) == 1, "Missing classifier parent")
|
| 78 |
+
parent = parents[0]
|
| 79 |
+
require(parent["kind"] == "causal_lm" and parent["job"]["condition"] == job["condition"] and
|
| 80 |
+
parent["job"]["pt_seed"] == job["pt_seed"] and
|
| 81 |
+
entry["pretraining_parent"]["sha256"] == parent["checkpoint"]["sha256"] and
|
| 82 |
+
entry["pretraining_parent"]["state_sha256"] == parent["state_sha256"],
|
| 83 |
+
"Classifier pretraining-parent provenance differs")
|
| 84 |
+
require(type(entry["selected_epoch"]) is int and 1 <= entry["selected_epoch"] <= 5,
|
| 85 |
+
"Invalid source-selected epoch")
|
| 86 |
+
return catalog
|
| 87 |
+
|
| 88 |
+
|
| 89 |
+
def select(catalog, model_id):
|
| 90 |
+
rows = [entry for entry in catalog["models"] if entry["id"] == model_id]
|
| 91 |
+
require(len(rows) == 1, "Unknown model identifier")
|
| 92 |
+
return rows[0]
|
| 93 |
+
|
| 94 |
+
|
| 95 |
+
def load_tokenizer(catalog, artifact_root):
|
| 96 |
+
descriptor = catalog["tokenizer"]
|
| 97 |
+
path = safe_path(artifact_root, descriptor["path"])
|
| 98 |
+
verify_file(path, descriptor)
|
| 99 |
+
tokenizer = Tokenizer.from_file(str(path))
|
| 100 |
+
require(tokenizer.get_vocab_size() == 32000 and
|
| 101 |
+
[tokenizer.token_to_id(s) for s in descriptor["special_tokens"]] == [0, 1, 2, 3],
|
| 102 |
+
"Tokenizer vocabulary or special-token identities differ")
|
| 103 |
+
require(tokenizer.padding is None and tokenizer.truncation is None, "Unexpected tokenizer padding/truncation")
|
| 104 |
+
return tokenizer
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
def state_parts(state, kind):
|
| 108 |
+
prefix = "transformer." if kind == "causal_lm" else "backbone."
|
| 109 |
+
backbone = {key[len(prefix):]: value for key, value in state.items() if key.startswith(prefix)}
|
| 110 |
+
head_name = "lm_head.weight" if kind == "causal_lm" else "score.weight"
|
| 111 |
+
require(backbone and head_name in state, "Incomplete backbone/head state")
|
| 112 |
+
return core.state_digest(backbone), core.state_digest({head_name: state[head_name]})
|
| 113 |
+
|
| 114 |
+
|
| 115 |
+
def config_for_core(public_config):
|
| 116 |
+
"""Restore integer-keyed config maps without mutating the public catalog."""
|
| 117 |
+
config = json.loads(json.dumps(public_config))
|
| 118 |
+
for field in ("id2label", "pruned_heads"):
|
| 119 |
+
config[field] = {int(key): value for key, value in config[field].items()}
|
| 120 |
+
return config
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
def original_config_sha_after_load(config):
|
| 124 |
+
"""Transformers 4.45.2 from_dict adds only this runtime key in-place."""
|
| 125 |
+
original = dict(config)
|
| 126 |
+
require(original.pop("attn_implementation", None) is None, "Unexpected injected attention implementation")
|
| 127 |
+
return canonical_sha(original)
|
| 128 |
+
|
| 129 |
+
|
| 130 |
+
def load_model(catalog, model_id, artifact_root, checkpoint_override=None):
|
| 131 |
+
entry = select(catalog, model_id)
|
| 132 |
+
path = Path(checkpoint_override) if checkpoint_override is not None else safe_path(artifact_root, entry["checkpoint"]["path"])
|
| 133 |
+
require(path.stat().st_size == entry["checkpoint"]["bytes"], "Checkpoint size differs")
|
| 134 |
+
model, payload = core.load_checkpoint(path,
|
| 135 |
+
expected_sha256=entry["checkpoint"]["sha256"], expected_kind=entry["kind"], expected_job=entry["job"],
|
| 136 |
+
expected_state_sha256=entry["state_sha256"], expected_protocol_sha256=catalog["training_protocol_sha256"],
|
| 137 |
+
expected_manifest_sha256=catalog["prepared_manifest_sha256"], expected_epoch=entry.get("selected_epoch"),
|
| 138 |
+
expected_config=config_for_core(catalog["config"]))
|
| 139 |
+
require(original_config_sha_after_load(payload["config"]) == entry["config_sha256"], "Full checkpoint config differs")
|
| 140 |
+
backbone_sha, head_sha = state_parts(payload["state_dict"], entry["kind"])
|
| 141 |
+
require(backbone_sha == entry["backbone_state_sha256"] and head_sha == entry["head_state_sha256"],
|
| 142 |
+
"Backbone/head identity differs")
|
| 143 |
+
require(len(payload["state_dict"]) == entry["state_tensor_count"], "Tensor inventory differs")
|
| 144 |
+
if entry["kind"] == "source_classifier":
|
| 145 |
+
require(model.score.bias is None and tuple(model.score.weight.shape) == (2, 768), "Classifier head shape differs")
|
| 146 |
+
del payload
|
| 147 |
+
return model
|
| 148 |
+
|
| 149 |
+
|
| 150 |
+
def encode_pairs(tokenizer, pairs):
|
| 151 |
+
require(isinstance(pairs, list) and pairs, "Supply at least one sentence pair")
|
| 152 |
+
ids = np.zeros((len(pairs), 512), dtype=np.int64)
|
| 153 |
+
masks = np.zeros_like(ids)
|
| 154 |
+
details = []
|
| 155 |
+
for index, pair in enumerate(pairs):
|
| 156 |
+
require(isinstance(pair, dict) and set(pair) == {"sentence1", "sentence2"},
|
| 157 |
+
"Each pair requires only sentence1 and sentence2; labels are not accepted")
|
| 158 |
+
original = []
|
| 159 |
+
for field in ("sentence1", "sentence2"):
|
| 160 |
+
text = pair[field]
|
| 161 |
+
require(isinstance(text, str) and bool(text), "Empty/nontext endpoint")
|
| 162 |
+
content = tokenizer.encode(text, add_special_tokens=False).ids
|
| 163 |
+
require(content and all(4 <= token < 32000 for token in content), "Unknown/special content token")
|
| 164 |
+
require(tokenizer.decode(content, skip_special_tokens=False) == text, "Text roundtrip failed")
|
| 165 |
+
original.append(content)
|
| 166 |
+
joined = original[0][:255] + [2] + original[1][:255] + [1]
|
| 167 |
+
ids[index, :len(joined)] = joined
|
| 168 |
+
masks[index, :len(joined)] = 1
|
| 169 |
+
details.append({"original_content_tokens": [len(x) for x in original],
|
| 170 |
+
"truncated_endpoints": [len(x) > 255 for x in original], "encoded_length": len(joined)})
|
| 171 |
+
return {"input_ids": ids, "attention_mask": masks, "labels": np.zeros(len(pairs), dtype=np.int64)}, details
|
| 172 |
+
|
| 173 |
+
|
| 174 |
+
def predict_pairs(model, tokenizer, pairs, batch_size=1):
|
| 175 |
+
arrays, details = encode_pairs(tokenizer, pairs)
|
| 176 |
+
predicted = core.predict_source(model, arrays, batch_size=batch_size, device="cpu", precision="float32")
|
| 177 |
+
values = []
|
| 178 |
+
for logp, pred, detail in zip(predicted["log_probabilities"], predicted["predictions"], details):
|
| 179 |
+
values.append({**detail, "log_probabilities": logp.tolist(), "probability_label_1": float(np.exp(logp[1])),
|
| 180 |
+
"logit_margin_label_1_minus_0": float(logp[1] - logp[0]), "predicted_label": int(pred)})
|
| 181 |
+
return values
|
| 182 |
+
|
| 183 |
+
|
| 184 |
+
def main():
|
| 185 |
+
parser = argparse.ArgumentParser(description=__doc__)
|
| 186 |
+
parser.add_argument("command", choices=("verify", "predict"))
|
| 187 |
+
parser.add_argument("--catalog", type=Path, required=True)
|
| 188 |
+
parser.add_argument("--catalog-sha256", required=True)
|
| 189 |
+
parser.add_argument("--artifact-root", type=Path, required=True)
|
| 190 |
+
parser.add_argument("--model-id", required=True, help="For example EP-pt0-ft0 or EP-pt0")
|
| 191 |
+
parser.add_argument("--checkpoint", type=Path, help="Explicit relocated checkpoint; all hashes still apply")
|
| 192 |
+
parser.add_argument("--pairs", type=Path, help="JSON array with sentence1/sentence2, without labels")
|
| 193 |
+
parser.add_argument("--batch-size", type=int, default=1)
|
| 194 |
+
parser.add_argument("--cpu-threads", type=int, default=4)
|
| 195 |
+
args = parser.parse_args()
|
| 196 |
+
require(args.cpu_threads > 0, "Invalid CPU thread count")
|
| 197 |
+
torch.set_num_threads(args.cpu_threads)
|
| 198 |
+
torch.set_float32_matmul_precision("highest")
|
| 199 |
+
catalog = read_catalog(args.catalog, args.catalog_sha256)
|
| 200 |
+
tokenizer = load_tokenizer(catalog, args.artifact_root)
|
| 201 |
+
model = load_model(catalog, args.model_id, args.artifact_root, args.checkpoint)
|
| 202 |
+
result = {"model_id": args.model_id, "checkpoint_sha256": select(catalog, args.model_id)["checkpoint"]["sha256"],
|
| 203 |
+
"catalog_sha256": args.catalog_sha256, "device": "cpu", "precision": "float32", "verified": True}
|
| 204 |
+
if args.command == "predict":
|
| 205 |
+
require(select(catalog, args.model_id)["kind"] == "source_classifier", "Pair inference requires a complete classifier")
|
| 206 |
+
require(args.pairs is not None, "--pairs is required for prediction")
|
| 207 |
+
result.update(fixed_direction="label_1", decision_rule="argmax_ties_label_0",
|
| 208 |
+
predictions=predict_pairs(model, tokenizer, json.loads(args.pairs.read_text()), args.batch_size))
|
| 209 |
+
print(json.dumps(result, indent=2, allow_nan=False))
|
| 210 |
+
|
| 211 |
+
|
| 212 |
+
if __name__ == "__main__":
|
| 213 |
+
main()
|
model_catalog.json
ADDED
|
@@ -0,0 +1,1156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"conditions": {
|
| 3 |
+
"EE": "English + additional English",
|
| 4 |
+
"EP": "English + natural protein",
|
| 5 |
+
"ES": "English + residue-shuffled protein"
|
| 6 |
+
},
|
| 7 |
+
"config": {
|
| 8 |
+
"_name_or_path": "",
|
| 9 |
+
"activation_function": "gelu_new",
|
| 10 |
+
"add_cross_attention": false,
|
| 11 |
+
"architectures": null,
|
| 12 |
+
"attn_pdrop": 0.1,
|
| 13 |
+
"bad_words_ids": null,
|
| 14 |
+
"begin_suppress_tokens": null,
|
| 15 |
+
"bos_token_id": 1,
|
| 16 |
+
"chunk_size_feed_forward": 0,
|
| 17 |
+
"cross_attention_hidden_size": null,
|
| 18 |
+
"decoder_start_token_id": null,
|
| 19 |
+
"diversity_penalty": 0.0,
|
| 20 |
+
"do_sample": false,
|
| 21 |
+
"early_stopping": false,
|
| 22 |
+
"embd_pdrop": 0.1,
|
| 23 |
+
"encoder_no_repeat_ngram_size": 0,
|
| 24 |
+
"eos_token_id": 1,
|
| 25 |
+
"exponential_decay_length_penalty": null,
|
| 26 |
+
"finetuning_task": null,
|
| 27 |
+
"forced_bos_token_id": null,
|
| 28 |
+
"forced_eos_token_id": null,
|
| 29 |
+
"id2label": {
|
| 30 |
+
"0": "LABEL_0",
|
| 31 |
+
"1": "LABEL_1"
|
| 32 |
+
},
|
| 33 |
+
"initializer_range": 0.02,
|
| 34 |
+
"is_decoder": false,
|
| 35 |
+
"is_encoder_decoder": false,
|
| 36 |
+
"label2id": {
|
| 37 |
+
"LABEL_0": 0,
|
| 38 |
+
"LABEL_1": 1
|
| 39 |
+
},
|
| 40 |
+
"layer_norm_epsilon": 1e-05,
|
| 41 |
+
"length_penalty": 1.0,
|
| 42 |
+
"max_length": 20,
|
| 43 |
+
"min_length": 0,
|
| 44 |
+
"model_type": "gpt2",
|
| 45 |
+
"n_ctx": 512,
|
| 46 |
+
"n_embd": 768,
|
| 47 |
+
"n_head": 12,
|
| 48 |
+
"n_inner": 3072,
|
| 49 |
+
"n_layer": 12,
|
| 50 |
+
"n_positions": 512,
|
| 51 |
+
"no_repeat_ngram_size": 0,
|
| 52 |
+
"num_beam_groups": 1,
|
| 53 |
+
"num_beams": 1,
|
| 54 |
+
"num_return_sequences": 1,
|
| 55 |
+
"output_attentions": false,
|
| 56 |
+
"output_hidden_states": false,
|
| 57 |
+
"output_scores": false,
|
| 58 |
+
"pad_token_id": 0,
|
| 59 |
+
"prefix": null,
|
| 60 |
+
"problem_type": null,
|
| 61 |
+
"pruned_heads": {},
|
| 62 |
+
"remove_invalid_values": false,
|
| 63 |
+
"reorder_and_upcast_attn": false,
|
| 64 |
+
"repetition_penalty": 1.0,
|
| 65 |
+
"resid_pdrop": 0.1,
|
| 66 |
+
"return_dict": true,
|
| 67 |
+
"return_dict_in_generate": false,
|
| 68 |
+
"scale_attn_by_inverse_layer_idx": false,
|
| 69 |
+
"scale_attn_weights": true,
|
| 70 |
+
"sep_token_id": null,
|
| 71 |
+
"summary_activation": null,
|
| 72 |
+
"summary_first_dropout": 0.1,
|
| 73 |
+
"summary_proj_to_labels": true,
|
| 74 |
+
"summary_type": "cls_index",
|
| 75 |
+
"summary_use_proj": true,
|
| 76 |
+
"suppress_tokens": null,
|
| 77 |
+
"task_specific_params": null,
|
| 78 |
+
"temperature": 1.0,
|
| 79 |
+
"tf_legacy_loss": false,
|
| 80 |
+
"tie_encoder_decoder": false,
|
| 81 |
+
"tie_word_embeddings": true,
|
| 82 |
+
"tokenizer_class": null,
|
| 83 |
+
"top_k": 50,
|
| 84 |
+
"top_p": 1.0,
|
| 85 |
+
"torch_dtype": null,
|
| 86 |
+
"torchscript": false,
|
| 87 |
+
"transformers_version": "4.45.2",
|
| 88 |
+
"typical_p": 1.0,
|
| 89 |
+
"use_bfloat16": false,
|
| 90 |
+
"use_cache": false,
|
| 91 |
+
"vocab_size": 32000
|
| 92 |
+
},
|
| 93 |
+
"config_canonical_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 94 |
+
"frozen_model_implementation_sha256": "b2362edf8850fe20fbd23cc958a71f92ac2a187de4316f53f8750d3bca857592",
|
| 95 |
+
"inference": {
|
| 96 |
+
"calibration": "none",
|
| 97 |
+
"context_length": 512,
|
| 98 |
+
"decision": "argmax; ties label 0",
|
| 99 |
+
"endpoint_cap": 255,
|
| 100 |
+
"format": "a[:255] + [SEP=2] + b[:255] + [EOS=1]",
|
| 101 |
+
"padding": "right, PAD=0",
|
| 102 |
+
"pooling": "last attention-mask-valid token (EOS)",
|
| 103 |
+
"portable_example_precision": "CPU FP32; exact CUDA BF16 predictions are not promised",
|
| 104 |
+
"reference_scoring_precision": "FP32 weights with CUDA BF16 autocast",
|
| 105 |
+
"score_direction": "label 1"
|
| 106 |
+
},
|
| 107 |
+
"model_repository": "dnagpt/bio2nl-models",
|
| 108 |
+
"models": [
|
| 109 |
+
{
|
| 110 |
+
"backbone_state_sha256": "46847dccfcf055c1dffd61b49aab0788118c0f8cdb57f2985ef2121267a7923c",
|
| 111 |
+
"checkpoint": {
|
| 112 |
+
"bytes": 440148490,
|
| 113 |
+
"path": "checkpoints/pretrain/EP/pt0/model.pt",
|
| 114 |
+
"sha256": "f6d44eb163960891e8af7d4f701580c852534f3ab476d9b6c281903f3c329327"
|
| 115 |
+
},
|
| 116 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 117 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 118 |
+
"head_state_sha256": "864d94b74f04ec00873ad45ede838366f35715975b2c9b17a745862136d4692a",
|
| 119 |
+
"id": "EP-pt0",
|
| 120 |
+
"input_tokens": 16777216,
|
| 121 |
+
"job": {
|
| 122 |
+
"condition": "EP",
|
| 123 |
+
"pt_seed": 0,
|
| 124 |
+
"smoke": false
|
| 125 |
+
},
|
| 126 |
+
"kind": "causal_lm",
|
| 127 |
+
"pretraining_steps": 1024,
|
| 128 |
+
"state_sha256": "246ecad3c16ba27a98e38fb99a8065dbe8b30514db32f080a088e4b7dc7197b9",
|
| 129 |
+
"state_tensor_count": 149,
|
| 130 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 131 |
+
"training_result_sha256": "45c54f2e63aed2ae8832a7372aa74a0309c0ebbea98eb8d938f2cc9ed044bb6a"
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"backbone_state_sha256": "e69423b4455a141f87d42fb2093e683a124c59fb16c1b451f0ddcf7ebcbe6261",
|
| 135 |
+
"checkpoint": {
|
| 136 |
+
"bytes": 440148490,
|
| 137 |
+
"path": "checkpoints/pretrain/EP/pt1/model.pt",
|
| 138 |
+
"sha256": "09c034afc616d6ed529fe62af1c604a07e0bc64a32f58630908300caf250c44a"
|
| 139 |
+
},
|
| 140 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 141 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 142 |
+
"head_state_sha256": "79da0d94521174151af7cf2a4c834b264df5c4e862371934db74e95954305e9a",
|
| 143 |
+
"id": "EP-pt1",
|
| 144 |
+
"input_tokens": 16777216,
|
| 145 |
+
"job": {
|
| 146 |
+
"condition": "EP",
|
| 147 |
+
"pt_seed": 1,
|
| 148 |
+
"smoke": false
|
| 149 |
+
},
|
| 150 |
+
"kind": "causal_lm",
|
| 151 |
+
"pretraining_steps": 1024,
|
| 152 |
+
"state_sha256": "75b547c5e431c1d995755d054a0b7aad403c2aaa463eedb1bdd38c634b098159",
|
| 153 |
+
"state_tensor_count": 149,
|
| 154 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 155 |
+
"training_result_sha256": "0aa1e7683afad1a5e325bc36d236227f26860694ac70afe33ca4335d14e80e44"
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"backbone_state_sha256": "e01b2e73ef3b92dafca5230b73522e051129d2037ab41394e1d5eb306a63cb53",
|
| 159 |
+
"checkpoint": {
|
| 160 |
+
"bytes": 440148490,
|
| 161 |
+
"path": "checkpoints/pretrain/EP/pt2/model.pt",
|
| 162 |
+
"sha256": "a1285feb6eb6380bfedfe670a27e9f09b19163b33f76145cc008de0b1e223155"
|
| 163 |
+
},
|
| 164 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 165 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 166 |
+
"head_state_sha256": "0dde349ccabaaae961f360ba0b71811b4457dff2b9dd6c0e104b89e022f92b9b",
|
| 167 |
+
"id": "EP-pt2",
|
| 168 |
+
"input_tokens": 16777216,
|
| 169 |
+
"job": {
|
| 170 |
+
"condition": "EP",
|
| 171 |
+
"pt_seed": 2,
|
| 172 |
+
"smoke": false
|
| 173 |
+
},
|
| 174 |
+
"kind": "causal_lm",
|
| 175 |
+
"pretraining_steps": 1024,
|
| 176 |
+
"state_sha256": "76e0af261c311b5bd49ffe47e72e7065d4f2405f1213222bff12cb42817f3f87",
|
| 177 |
+
"state_tensor_count": 149,
|
| 178 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 179 |
+
"training_result_sha256": "fa0385a030aeb97c295aa2bb7983dee396e9189f31aa5a4c19302c9862941567"
|
| 180 |
+
},
|
| 181 |
+
{
|
| 182 |
+
"backbone_state_sha256": "ba8e639f5618984aa88f011f3ef6c6de8eed57638a3a943fe3e47465bbb10e3d",
|
| 183 |
+
"checkpoint": {
|
| 184 |
+
"bytes": 440148490,
|
| 185 |
+
"path": "checkpoints/pretrain/ES/pt0/model.pt",
|
| 186 |
+
"sha256": "452c6178f682ae50e53c8df1311134e188c99d2fcce7805f0d65d379910f277d"
|
| 187 |
+
},
|
| 188 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 189 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 190 |
+
"head_state_sha256": "2c5d023746adbcb65f94caf6bae71fc5422e7faf9f445c539fb0e3117aab2f35",
|
| 191 |
+
"id": "ES-pt0",
|
| 192 |
+
"input_tokens": 16777216,
|
| 193 |
+
"job": {
|
| 194 |
+
"condition": "ES",
|
| 195 |
+
"pt_seed": 0,
|
| 196 |
+
"smoke": false
|
| 197 |
+
},
|
| 198 |
+
"kind": "causal_lm",
|
| 199 |
+
"pretraining_steps": 1024,
|
| 200 |
+
"state_sha256": "53fc36f1cfcaedde896d0fce93d53c3040a670fb76a479311fb91c898f0af7ba",
|
| 201 |
+
"state_tensor_count": 149,
|
| 202 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 203 |
+
"training_result_sha256": "bbf0317458cc5b7bad58d3393d04fd0467fc72ea817551f4c97223eaa35e6dca"
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"backbone_state_sha256": "7a9dde5809d278c9f48e263263ad833fe784b461aecb5419fc7f4d557fb4ab7e",
|
| 207 |
+
"checkpoint": {
|
| 208 |
+
"bytes": 440148490,
|
| 209 |
+
"path": "checkpoints/pretrain/ES/pt1/model.pt",
|
| 210 |
+
"sha256": "2f357c92c20c633a636f936246bfeadec31a9ee8792bfcaef1db2acf3ee1a737"
|
| 211 |
+
},
|
| 212 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 213 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 214 |
+
"head_state_sha256": "fefbb337fbd1d392b37b395cf2edb35a1e0e5ae072d021bbfb4c040efccd576a",
|
| 215 |
+
"id": "ES-pt1",
|
| 216 |
+
"input_tokens": 16777216,
|
| 217 |
+
"job": {
|
| 218 |
+
"condition": "ES",
|
| 219 |
+
"pt_seed": 1,
|
| 220 |
+
"smoke": false
|
| 221 |
+
},
|
| 222 |
+
"kind": "causal_lm",
|
| 223 |
+
"pretraining_steps": 1024,
|
| 224 |
+
"state_sha256": "1da85f639f02e8a9a2fe41db83f7c951cef9a235466a340da3b4d94dfc2d8cfc",
|
| 225 |
+
"state_tensor_count": 149,
|
| 226 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 227 |
+
"training_result_sha256": "884f4cbb144127de4ce3e8dd01b78039a9fae95a199e5ba80eb3a8c5d7a16fd7"
|
| 228 |
+
},
|
| 229 |
+
{
|
| 230 |
+
"backbone_state_sha256": "7c9720e05764f2e9893191b12ae39c07ba7af8a55beacc1670a79add479a9c24",
|
| 231 |
+
"checkpoint": {
|
| 232 |
+
"bytes": 440148490,
|
| 233 |
+
"path": "checkpoints/pretrain/ES/pt2/model.pt",
|
| 234 |
+
"sha256": "e954373b086d2d3fe3b015440a185f4a146e01825007bc57cbcc609ed3d30254"
|
| 235 |
+
},
|
| 236 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 237 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 238 |
+
"head_state_sha256": "d55dd319963c2dff048185623ee3121ead803b0f3297c817d4358b119c1a53e4",
|
| 239 |
+
"id": "ES-pt2",
|
| 240 |
+
"input_tokens": 16777216,
|
| 241 |
+
"job": {
|
| 242 |
+
"condition": "ES",
|
| 243 |
+
"pt_seed": 2,
|
| 244 |
+
"smoke": false
|
| 245 |
+
},
|
| 246 |
+
"kind": "causal_lm",
|
| 247 |
+
"pretraining_steps": 1024,
|
| 248 |
+
"state_sha256": "531f13ab25facf6a21f3a730dd3cbebc82d8f79aa24526fdde96f57dbd7097d9",
|
| 249 |
+
"state_tensor_count": 149,
|
| 250 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 251 |
+
"training_result_sha256": "f3ae824b0126b2d239cd8a25b4eebd5840a87507eedce3b9f4a83211d8b83bbb"
|
| 252 |
+
},
|
| 253 |
+
{
|
| 254 |
+
"backbone_state_sha256": "cc03cacccecd691268649146d0f709f6b4548463727d9fb61cba69b9ae43a761",
|
| 255 |
+
"checkpoint": {
|
| 256 |
+
"bytes": 440148490,
|
| 257 |
+
"path": "checkpoints/pretrain/EE/pt0/model.pt",
|
| 258 |
+
"sha256": "5af7730f436af372a0d43bfed57f87a3ea2e6aa4826493aa21eacd3acdd4dccc"
|
| 259 |
+
},
|
| 260 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 261 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 262 |
+
"head_state_sha256": "f3c5b803b261a26cfc969c726871427ee9771169b2eec9eb3981e3fcc04a096f",
|
| 263 |
+
"id": "EE-pt0",
|
| 264 |
+
"input_tokens": 16777216,
|
| 265 |
+
"job": {
|
| 266 |
+
"condition": "EE",
|
| 267 |
+
"pt_seed": 0,
|
| 268 |
+
"smoke": false
|
| 269 |
+
},
|
| 270 |
+
"kind": "causal_lm",
|
| 271 |
+
"pretraining_steps": 1024,
|
| 272 |
+
"state_sha256": "be2793719f6a9cbd4d15528e4c0295d8a1558eb7b0ecf098eceb00c2cee35ecd",
|
| 273 |
+
"state_tensor_count": 149,
|
| 274 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 275 |
+
"training_result_sha256": "08c64e01c921c313f60272c8ff6cfb4f7a77909662de43b2af6ad52ed6305838"
|
| 276 |
+
},
|
| 277 |
+
{
|
| 278 |
+
"backbone_state_sha256": "1677dae3fcded88212e65045cb9399548e6e6b1a364cf44e85785ee78626a4c2",
|
| 279 |
+
"checkpoint": {
|
| 280 |
+
"bytes": 440148490,
|
| 281 |
+
"path": "checkpoints/pretrain/EE/pt1/model.pt",
|
| 282 |
+
"sha256": "653a88903ee373e5b8933c71d386a64ca6840249f9a42cc2c992b0202f04739f"
|
| 283 |
+
},
|
| 284 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 285 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 286 |
+
"head_state_sha256": "b99147643f7a4bb91fc7ea39edae68ec4d9015b767e92c7a9cfec47bf5b8943e",
|
| 287 |
+
"id": "EE-pt1",
|
| 288 |
+
"input_tokens": 16777216,
|
| 289 |
+
"job": {
|
| 290 |
+
"condition": "EE",
|
| 291 |
+
"pt_seed": 1,
|
| 292 |
+
"smoke": false
|
| 293 |
+
},
|
| 294 |
+
"kind": "causal_lm",
|
| 295 |
+
"pretraining_steps": 1024,
|
| 296 |
+
"state_sha256": "2081069fd01c7c0d80bea6899bab92996f17480b375d625edb1e7095445ac622",
|
| 297 |
+
"state_tensor_count": 149,
|
| 298 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 299 |
+
"training_result_sha256": "d0dff9e41c053c0983a5bc952898265f24edd35d0baea47b28a5aa6c7b4dfe81"
|
| 300 |
+
},
|
| 301 |
+
{
|
| 302 |
+
"backbone_state_sha256": "aee2a29f1a4a6ce76ed3fa124f85cc39ba1aa317fc2970e4a692ee4dcec75209",
|
| 303 |
+
"checkpoint": {
|
| 304 |
+
"bytes": 440148490,
|
| 305 |
+
"path": "checkpoints/pretrain/EE/pt2/model.pt",
|
| 306 |
+
"sha256": "68e49c6af5cb3fa34b1820925cb1751055c38c25de8122b5ba19a40937ad0ba9"
|
| 307 |
+
},
|
| 308 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 309 |
+
"head_description": "tied 32000 x 768 language-model output embedding",
|
| 310 |
+
"head_state_sha256": "a1bfc20e2807ee202e50a6e4f474054e11fcc2e10e9659bc9b75fbc70cfb06a7",
|
| 311 |
+
"id": "EE-pt2",
|
| 312 |
+
"input_tokens": 16777216,
|
| 313 |
+
"job": {
|
| 314 |
+
"condition": "EE",
|
| 315 |
+
"pt_seed": 2,
|
| 316 |
+
"smoke": false
|
| 317 |
+
},
|
| 318 |
+
"kind": "causal_lm",
|
| 319 |
+
"pretraining_steps": 1024,
|
| 320 |
+
"state_sha256": "7b2de62c97d190cced9341476a36d0d281805c6f163f908099e7b600582897ea",
|
| 321 |
+
"state_tensor_count": 149,
|
| 322 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 323 |
+
"training_result_sha256": "85817c18ccea3f2d1b1f2780a92901903f775a1362f8c3be3892886ad51863d3"
|
| 324 |
+
},
|
| 325 |
+
{
|
| 326 |
+
"backbone_state_sha256": "723965894f5d1ee4ddb6071944bdef3901ee9305d6d40441a86db67f0124a79b",
|
| 327 |
+
"checkpoint": {
|
| 328 |
+
"bytes": 440154440,
|
| 329 |
+
"path": "checkpoints/source/EP/pt0/ft0/best.pt",
|
| 330 |
+
"sha256": "574117f9bbbaa589a0f1fd726567ead899510c05bcbcc0cbf71e3b57c72edebb"
|
| 331 |
+
},
|
| 332 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 333 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 334 |
+
"head_state_sha256": "ce0e964f2bdcb9af6c77b5c0af05ae1e90472c95aa33d77676c59b3c7f195ee1",
|
| 335 |
+
"id": "EP-pt0-ft0",
|
| 336 |
+
"job": {
|
| 337 |
+
"condition": "EP",
|
| 338 |
+
"ft_seed": 0,
|
| 339 |
+
"pt_seed": 0,
|
| 340 |
+
"smoke": false
|
| 341 |
+
},
|
| 342 |
+
"kind": "source_classifier",
|
| 343 |
+
"pretraining_parent": {
|
| 344 |
+
"id": "EP-pt0",
|
| 345 |
+
"sha256": "f6d44eb163960891e8af7d4f701580c852534f3ab476d9b6c281903f3c329327",
|
| 346 |
+
"state_sha256": "246ecad3c16ba27a98e38fb99a8065dbe8b30514db32f080a088e4b7dc7197b9"
|
| 347 |
+
},
|
| 348 |
+
"selected_epoch": 4,
|
| 349 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 350 |
+
"state_sha256": "2d7c592dbb1825cdfcf7b62b50e2e238784724c722d2207b4a8af0ea937a152f",
|
| 351 |
+
"state_tensor_count": 149,
|
| 352 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 353 |
+
"training_result_sha256": "1caa48707e014ce011a873819c9c90261d0be643b7a4d0cdf12f843327cf7578"
|
| 354 |
+
},
|
| 355 |
+
{
|
| 356 |
+
"backbone_state_sha256": "f6ff607c6203d848701c1f8f465c0590f6514a4baa27aa6f24376bd9b06f2522",
|
| 357 |
+
"checkpoint": {
|
| 358 |
+
"bytes": 440154440,
|
| 359 |
+
"path": "checkpoints/source/EP/pt0/ft1/best.pt",
|
| 360 |
+
"sha256": "a5c9522ed086bb54ce62ca74717c130143cfe07352b07a698529f1bedb497b6c"
|
| 361 |
+
},
|
| 362 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 363 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 364 |
+
"head_state_sha256": "b2f08aae473191eb7e30dac84c48ad119f52899623b64a1df34cc52d297b9e97",
|
| 365 |
+
"id": "EP-pt0-ft1",
|
| 366 |
+
"job": {
|
| 367 |
+
"condition": "EP",
|
| 368 |
+
"ft_seed": 1,
|
| 369 |
+
"pt_seed": 0,
|
| 370 |
+
"smoke": false
|
| 371 |
+
},
|
| 372 |
+
"kind": "source_classifier",
|
| 373 |
+
"pretraining_parent": {
|
| 374 |
+
"id": "EP-pt0",
|
| 375 |
+
"sha256": "f6d44eb163960891e8af7d4f701580c852534f3ab476d9b6c281903f3c329327",
|
| 376 |
+
"state_sha256": "246ecad3c16ba27a98e38fb99a8065dbe8b30514db32f080a088e4b7dc7197b9"
|
| 377 |
+
},
|
| 378 |
+
"selected_epoch": 4,
|
| 379 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 380 |
+
"state_sha256": "03fec3d6542957306b1cd01e19b852e3ec8e94642c761ae27adc62b1c0cc7247",
|
| 381 |
+
"state_tensor_count": 149,
|
| 382 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 383 |
+
"training_result_sha256": "604ba22dc8da9abded55361e192ef3984c4b3052086795091e449b894a1af9df"
|
| 384 |
+
},
|
| 385 |
+
{
|
| 386 |
+
"backbone_state_sha256": "acfac562250062feb6aa69a5d604ba235b56b47cc6ac14590da6ff414df61dd9",
|
| 387 |
+
"checkpoint": {
|
| 388 |
+
"bytes": 440154440,
|
| 389 |
+
"path": "checkpoints/source/EP/pt0/ft2/best.pt",
|
| 390 |
+
"sha256": "19277d64bb879906e98df99d1c77623c46d8ccad2c33eda796ba1b9bcd4cf3b5"
|
| 391 |
+
},
|
| 392 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 393 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 394 |
+
"head_state_sha256": "b6216d87f9855cf295082ece2b0d8c5f22477c475598ea24f80c9fba74df36b9",
|
| 395 |
+
"id": "EP-pt0-ft2",
|
| 396 |
+
"job": {
|
| 397 |
+
"condition": "EP",
|
| 398 |
+
"ft_seed": 2,
|
| 399 |
+
"pt_seed": 0,
|
| 400 |
+
"smoke": false
|
| 401 |
+
},
|
| 402 |
+
"kind": "source_classifier",
|
| 403 |
+
"pretraining_parent": {
|
| 404 |
+
"id": "EP-pt0",
|
| 405 |
+
"sha256": "f6d44eb163960891e8af7d4f701580c852534f3ab476d9b6c281903f3c329327",
|
| 406 |
+
"state_sha256": "246ecad3c16ba27a98e38fb99a8065dbe8b30514db32f080a088e4b7dc7197b9"
|
| 407 |
+
},
|
| 408 |
+
"selected_epoch": 5,
|
| 409 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 410 |
+
"state_sha256": "3d57d437443593afa95af3cbb64afbb0648c56d6b4f4d7afb8ce37621dff3b11",
|
| 411 |
+
"state_tensor_count": 149,
|
| 412 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 413 |
+
"training_result_sha256": "4b5207bad2e467064b9ca25d9cf498dcff1e458bedfd79dba01efab7882bdecd"
|
| 414 |
+
},
|
| 415 |
+
{
|
| 416 |
+
"backbone_state_sha256": "5c8397b6f4c4961d34e03072aa0f91871312f0c02e8967dd7c6f2bb09ca85795",
|
| 417 |
+
"checkpoint": {
|
| 418 |
+
"bytes": 440154440,
|
| 419 |
+
"path": "checkpoints/source/ES/pt0/ft0/best.pt",
|
| 420 |
+
"sha256": "69069d19cade14739612d991743be14f3debe97e8c8cf48379810bed1498e913"
|
| 421 |
+
},
|
| 422 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 423 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 424 |
+
"head_state_sha256": "2bd44f45605a18f99d3b6e96431ad800ffec52839704eafcfd49c9a264b046b6",
|
| 425 |
+
"id": "ES-pt0-ft0",
|
| 426 |
+
"job": {
|
| 427 |
+
"condition": "ES",
|
| 428 |
+
"ft_seed": 0,
|
| 429 |
+
"pt_seed": 0,
|
| 430 |
+
"smoke": false
|
| 431 |
+
},
|
| 432 |
+
"kind": "source_classifier",
|
| 433 |
+
"pretraining_parent": {
|
| 434 |
+
"id": "ES-pt0",
|
| 435 |
+
"sha256": "452c6178f682ae50e53c8df1311134e188c99d2fcce7805f0d65d379910f277d",
|
| 436 |
+
"state_sha256": "53fc36f1cfcaedde896d0fce93d53c3040a670fb76a479311fb91c898f0af7ba"
|
| 437 |
+
},
|
| 438 |
+
"selected_epoch": 1,
|
| 439 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 440 |
+
"state_sha256": "aa1e0fa9bc5db4d86a54955d54a3346b1757a3da807489c796b808487f647131",
|
| 441 |
+
"state_tensor_count": 149,
|
| 442 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 443 |
+
"training_result_sha256": "00f8407bd63ca5f6c317c4c43fb82f266efb82fb96e546d066cddbec1ebfb26b"
|
| 444 |
+
},
|
| 445 |
+
{
|
| 446 |
+
"backbone_state_sha256": "57b2db2c96583382e7a49ec85474d377cf8555815cb717cc4720cc138576711d",
|
| 447 |
+
"checkpoint": {
|
| 448 |
+
"bytes": 440154440,
|
| 449 |
+
"path": "checkpoints/source/ES/pt0/ft1/best.pt",
|
| 450 |
+
"sha256": "bde6f1f919b7f5657edb0edb920941df3db8a88dd44089acd05b6b89c29c19be"
|
| 451 |
+
},
|
| 452 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 453 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 454 |
+
"head_state_sha256": "1bbe058fde769286e8a0611f2b789bf1425e770de7c1319438b4f93b4626c6d1",
|
| 455 |
+
"id": "ES-pt0-ft1",
|
| 456 |
+
"job": {
|
| 457 |
+
"condition": "ES",
|
| 458 |
+
"ft_seed": 1,
|
| 459 |
+
"pt_seed": 0,
|
| 460 |
+
"smoke": false
|
| 461 |
+
},
|
| 462 |
+
"kind": "source_classifier",
|
| 463 |
+
"pretraining_parent": {
|
| 464 |
+
"id": "ES-pt0",
|
| 465 |
+
"sha256": "452c6178f682ae50e53c8df1311134e188c99d2fcce7805f0d65d379910f277d",
|
| 466 |
+
"state_sha256": "53fc36f1cfcaedde896d0fce93d53c3040a670fb76a479311fb91c898f0af7ba"
|
| 467 |
+
},
|
| 468 |
+
"selected_epoch": 2,
|
| 469 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 470 |
+
"state_sha256": "4ea04eb3dcaf63935cb0e377d2489a5126c987cdcd4bf2350ccf5c2f2b0ae8f8",
|
| 471 |
+
"state_tensor_count": 149,
|
| 472 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 473 |
+
"training_result_sha256": "23032955f58927fb361524d180a546af201e1b46b5d8e2ad58e4d08c109a0cb5"
|
| 474 |
+
},
|
| 475 |
+
{
|
| 476 |
+
"backbone_state_sha256": "a45ce8b281d893d86c0d1fcae7eaff9cc2c6e0a60b05a9064195e9eafc915979",
|
| 477 |
+
"checkpoint": {
|
| 478 |
+
"bytes": 440154440,
|
| 479 |
+
"path": "checkpoints/source/ES/pt0/ft2/best.pt",
|
| 480 |
+
"sha256": "ec82de031e16af6005b1221327e6b58f9b8d1dc8f1a0072325a33453575b3b51"
|
| 481 |
+
},
|
| 482 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 483 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 484 |
+
"head_state_sha256": "ff98005b3c9f32818e3315544ee5b359ea2086116b8461b95e2516696f193adb",
|
| 485 |
+
"id": "ES-pt0-ft2",
|
| 486 |
+
"job": {
|
| 487 |
+
"condition": "ES",
|
| 488 |
+
"ft_seed": 2,
|
| 489 |
+
"pt_seed": 0,
|
| 490 |
+
"smoke": false
|
| 491 |
+
},
|
| 492 |
+
"kind": "source_classifier",
|
| 493 |
+
"pretraining_parent": {
|
| 494 |
+
"id": "ES-pt0",
|
| 495 |
+
"sha256": "452c6178f682ae50e53c8df1311134e188c99d2fcce7805f0d65d379910f277d",
|
| 496 |
+
"state_sha256": "53fc36f1cfcaedde896d0fce93d53c3040a670fb76a479311fb91c898f0af7ba"
|
| 497 |
+
},
|
| 498 |
+
"selected_epoch": 2,
|
| 499 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 500 |
+
"state_sha256": "fe232820c5a890ca2358bb63b1a56f67e15036c47bafbc178ddc48f55e0661d8",
|
| 501 |
+
"state_tensor_count": 149,
|
| 502 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 503 |
+
"training_result_sha256": "b2b434faadb87ddc9158dcddfbd3d03b7dff3c3a022bbbfeb99e74f48c9ba450"
|
| 504 |
+
},
|
| 505 |
+
{
|
| 506 |
+
"backbone_state_sha256": "3728d8e1d773d2160557e98192a815861fce61991957be1bf6a546c9a69a6ddc",
|
| 507 |
+
"checkpoint": {
|
| 508 |
+
"bytes": 440154440,
|
| 509 |
+
"path": "checkpoints/source/EE/pt0/ft0/best.pt",
|
| 510 |
+
"sha256": "c1aa8820704665541550d7f59fed367c30dcc55b60c90f4ea2dcec75dce4103e"
|
| 511 |
+
},
|
| 512 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 513 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 514 |
+
"head_state_sha256": "b0b0bf2750b6c488a9ef24e88b2e5ea979d4cfe29697c799f1b27469e5efca1f",
|
| 515 |
+
"id": "EE-pt0-ft0",
|
| 516 |
+
"job": {
|
| 517 |
+
"condition": "EE",
|
| 518 |
+
"ft_seed": 0,
|
| 519 |
+
"pt_seed": 0,
|
| 520 |
+
"smoke": false
|
| 521 |
+
},
|
| 522 |
+
"kind": "source_classifier",
|
| 523 |
+
"pretraining_parent": {
|
| 524 |
+
"id": "EE-pt0",
|
| 525 |
+
"sha256": "5af7730f436af372a0d43bfed57f87a3ea2e6aa4826493aa21eacd3acdd4dccc",
|
| 526 |
+
"state_sha256": "be2793719f6a9cbd4d15528e4c0295d8a1558eb7b0ecf098eceb00c2cee35ecd"
|
| 527 |
+
},
|
| 528 |
+
"selected_epoch": 1,
|
| 529 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 530 |
+
"state_sha256": "1757b63b89c41333c8c4fed755a57f0c1d6c27954bb6d628bd89cfb5aaad085d",
|
| 531 |
+
"state_tensor_count": 149,
|
| 532 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 533 |
+
"training_result_sha256": "12f42581fe70e1f537e3abaa9b74ce92bc9b25f13eed5dbc742b3c088d55a1e0"
|
| 534 |
+
},
|
| 535 |
+
{
|
| 536 |
+
"backbone_state_sha256": "59013342320d1d7a743a495be78711fec93341047e644e0c1faa8263d6fd71f8",
|
| 537 |
+
"checkpoint": {
|
| 538 |
+
"bytes": 440154440,
|
| 539 |
+
"path": "checkpoints/source/EE/pt0/ft1/best.pt",
|
| 540 |
+
"sha256": "2a3ac91f4392196e836221e0435388b0e6ecae6c117be26f2b43de3e6507c4a1"
|
| 541 |
+
},
|
| 542 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 543 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 544 |
+
"head_state_sha256": "f4ddd3d3da12ee2830aea75ddfc039db98553b21287ec5464faa66bcc054e084",
|
| 545 |
+
"id": "EE-pt0-ft1",
|
| 546 |
+
"job": {
|
| 547 |
+
"condition": "EE",
|
| 548 |
+
"ft_seed": 1,
|
| 549 |
+
"pt_seed": 0,
|
| 550 |
+
"smoke": false
|
| 551 |
+
},
|
| 552 |
+
"kind": "source_classifier",
|
| 553 |
+
"pretraining_parent": {
|
| 554 |
+
"id": "EE-pt0",
|
| 555 |
+
"sha256": "5af7730f436af372a0d43bfed57f87a3ea2e6aa4826493aa21eacd3acdd4dccc",
|
| 556 |
+
"state_sha256": "be2793719f6a9cbd4d15528e4c0295d8a1558eb7b0ecf098eceb00c2cee35ecd"
|
| 557 |
+
},
|
| 558 |
+
"selected_epoch": 4,
|
| 559 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 560 |
+
"state_sha256": "34db029a40eef36d13cd998b60134d40d14faf7734616f3e2a7bab6ea732b17e",
|
| 561 |
+
"state_tensor_count": 149,
|
| 562 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 563 |
+
"training_result_sha256": "3d30522a8ae34c545eb0d5629804232b1c8a2e099c488f21c0193934b36533fc"
|
| 564 |
+
},
|
| 565 |
+
{
|
| 566 |
+
"backbone_state_sha256": "0df838819909faa38db698bd711529be3d2fd4b076859c46a4720cbe3fdc03f4",
|
| 567 |
+
"checkpoint": {
|
| 568 |
+
"bytes": 440154440,
|
| 569 |
+
"path": "checkpoints/source/EE/pt0/ft2/best.pt",
|
| 570 |
+
"sha256": "22d6e120e8f24fb5b0bb15bcb2d463733dea39d6599ed0234841cb9ff47f2ee1"
|
| 571 |
+
},
|
| 572 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 573 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 574 |
+
"head_state_sha256": "3e996e0f448d66d72e033902f741bd68b53d1b53530d1a519643cdf4048de64e",
|
| 575 |
+
"id": "EE-pt0-ft2",
|
| 576 |
+
"job": {
|
| 577 |
+
"condition": "EE",
|
| 578 |
+
"ft_seed": 2,
|
| 579 |
+
"pt_seed": 0,
|
| 580 |
+
"smoke": false
|
| 581 |
+
},
|
| 582 |
+
"kind": "source_classifier",
|
| 583 |
+
"pretraining_parent": {
|
| 584 |
+
"id": "EE-pt0",
|
| 585 |
+
"sha256": "5af7730f436af372a0d43bfed57f87a3ea2e6aa4826493aa21eacd3acdd4dccc",
|
| 586 |
+
"state_sha256": "be2793719f6a9cbd4d15528e4c0295d8a1558eb7b0ecf098eceb00c2cee35ecd"
|
| 587 |
+
},
|
| 588 |
+
"selected_epoch": 4,
|
| 589 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 590 |
+
"state_sha256": "d448ae3be2e175876403773442f1d22216182a6102697191e6c6dba022b3bef8",
|
| 591 |
+
"state_tensor_count": 149,
|
| 592 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 593 |
+
"training_result_sha256": "06d73f8a737c536e7d56416b0c20ddbb7b4cecd028a829828ec16e1c4b38ec30"
|
| 594 |
+
},
|
| 595 |
+
{
|
| 596 |
+
"backbone_state_sha256": "53a54e3b371a9e284333d75e587202d9ac6d611d6920b3cd24a324e5bf26160f",
|
| 597 |
+
"checkpoint": {
|
| 598 |
+
"bytes": 440154440,
|
| 599 |
+
"path": "checkpoints/source/EP/pt1/ft0/best.pt",
|
| 600 |
+
"sha256": "1a4e205e237b684cc14b79aea27a59ba45adb68e3e2ee0d345a7476433d88e3c"
|
| 601 |
+
},
|
| 602 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 603 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 604 |
+
"head_state_sha256": "aa55d04a39b38d0029d3c241aed34f3a19d3661d5f44c1713b7f40969c78e311",
|
| 605 |
+
"id": "EP-pt1-ft0",
|
| 606 |
+
"job": {
|
| 607 |
+
"condition": "EP",
|
| 608 |
+
"ft_seed": 0,
|
| 609 |
+
"pt_seed": 1,
|
| 610 |
+
"smoke": false
|
| 611 |
+
},
|
| 612 |
+
"kind": "source_classifier",
|
| 613 |
+
"pretraining_parent": {
|
| 614 |
+
"id": "EP-pt1",
|
| 615 |
+
"sha256": "09c034afc616d6ed529fe62af1c604a07e0bc64a32f58630908300caf250c44a",
|
| 616 |
+
"state_sha256": "75b547c5e431c1d995755d054a0b7aad403c2aaa463eedb1bdd38c634b098159"
|
| 617 |
+
},
|
| 618 |
+
"selected_epoch": 1,
|
| 619 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 620 |
+
"state_sha256": "18ea6da80c0554321a0c226b5776eb0bd9202943d316c380beb9292b6e0307d4",
|
| 621 |
+
"state_tensor_count": 149,
|
| 622 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 623 |
+
"training_result_sha256": "ee45255532196a6639d8b2a6d53146276e7866e4f1f3261ebe2053738704e27b"
|
| 624 |
+
},
|
| 625 |
+
{
|
| 626 |
+
"backbone_state_sha256": "38c35efc7c17e78d05b8ef2f427d8359275698fb9506413a156aa08373bbadb2",
|
| 627 |
+
"checkpoint": {
|
| 628 |
+
"bytes": 440154440,
|
| 629 |
+
"path": "checkpoints/source/EP/pt1/ft1/best.pt",
|
| 630 |
+
"sha256": "2e3ad2344834e5a70403bbef8c19f55aacb6b25b83725138bb82e2274723797c"
|
| 631 |
+
},
|
| 632 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 633 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 634 |
+
"head_state_sha256": "e7ce95e30e08bd2d1e6d8edd20c526fa36bcced29dc49a5f68f911c1e00d9abb",
|
| 635 |
+
"id": "EP-pt1-ft1",
|
| 636 |
+
"job": {
|
| 637 |
+
"condition": "EP",
|
| 638 |
+
"ft_seed": 1,
|
| 639 |
+
"pt_seed": 1,
|
| 640 |
+
"smoke": false
|
| 641 |
+
},
|
| 642 |
+
"kind": "source_classifier",
|
| 643 |
+
"pretraining_parent": {
|
| 644 |
+
"id": "EP-pt1",
|
| 645 |
+
"sha256": "09c034afc616d6ed529fe62af1c604a07e0bc64a32f58630908300caf250c44a",
|
| 646 |
+
"state_sha256": "75b547c5e431c1d995755d054a0b7aad403c2aaa463eedb1bdd38c634b098159"
|
| 647 |
+
},
|
| 648 |
+
"selected_epoch": 4,
|
| 649 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 650 |
+
"state_sha256": "13a2cfcdd361e229e179d3868c4818558657b9440196658269cba769267930c7",
|
| 651 |
+
"state_tensor_count": 149,
|
| 652 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 653 |
+
"training_result_sha256": "8310e8b4c2a20b0aae6d28c688b411c449064e7b02e78027c7e75126acbc5da3"
|
| 654 |
+
},
|
| 655 |
+
{
|
| 656 |
+
"backbone_state_sha256": "cafe4df0d4e922fc3eab0436527226edf072d2d4d1ade2398606ecfadc4e19d1",
|
| 657 |
+
"checkpoint": {
|
| 658 |
+
"bytes": 440154440,
|
| 659 |
+
"path": "checkpoints/source/EP/pt1/ft2/best.pt",
|
| 660 |
+
"sha256": "47615a93378959abbe6ffaf3475a6561ec9c6d11a94a04da6954b6801994704e"
|
| 661 |
+
},
|
| 662 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 663 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 664 |
+
"head_state_sha256": "248c6b293dd9c6f4e88b2c9f6c3749f72c3d18ec48fdca4ca4b1c3ed4a403412",
|
| 665 |
+
"id": "EP-pt1-ft2",
|
| 666 |
+
"job": {
|
| 667 |
+
"condition": "EP",
|
| 668 |
+
"ft_seed": 2,
|
| 669 |
+
"pt_seed": 1,
|
| 670 |
+
"smoke": false
|
| 671 |
+
},
|
| 672 |
+
"kind": "source_classifier",
|
| 673 |
+
"pretraining_parent": {
|
| 674 |
+
"id": "EP-pt1",
|
| 675 |
+
"sha256": "09c034afc616d6ed529fe62af1c604a07e0bc64a32f58630908300caf250c44a",
|
| 676 |
+
"state_sha256": "75b547c5e431c1d995755d054a0b7aad403c2aaa463eedb1bdd38c634b098159"
|
| 677 |
+
},
|
| 678 |
+
"selected_epoch": 5,
|
| 679 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 680 |
+
"state_sha256": "a3add110ff52792e7df7f540925b06da42649a418d48e01a6318c05dd90b7908",
|
| 681 |
+
"state_tensor_count": 149,
|
| 682 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 683 |
+
"training_result_sha256": "f6eaa338c9d649a440915a333a02d62800c39104180f628c12cfbb4d35d0783a"
|
| 684 |
+
},
|
| 685 |
+
{
|
| 686 |
+
"backbone_state_sha256": "fefb18acf164508f3291214deadc1a3433b09ac60a26c6bf18aafb604f4652f3",
|
| 687 |
+
"checkpoint": {
|
| 688 |
+
"bytes": 440154440,
|
| 689 |
+
"path": "checkpoints/source/ES/pt1/ft0/best.pt",
|
| 690 |
+
"sha256": "b24e6de1f73186bc5167afce790c5794dd109f1d077fde1dc207ff4c360bed5c"
|
| 691 |
+
},
|
| 692 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 693 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 694 |
+
"head_state_sha256": "ed7651fe8547a4a1bbf3acf883e9c2e8303b3573ac541ffc90c3ca3defe280d1",
|
| 695 |
+
"id": "ES-pt1-ft0",
|
| 696 |
+
"job": {
|
| 697 |
+
"condition": "ES",
|
| 698 |
+
"ft_seed": 0,
|
| 699 |
+
"pt_seed": 1,
|
| 700 |
+
"smoke": false
|
| 701 |
+
},
|
| 702 |
+
"kind": "source_classifier",
|
| 703 |
+
"pretraining_parent": {
|
| 704 |
+
"id": "ES-pt1",
|
| 705 |
+
"sha256": "2f357c92c20c633a636f936246bfeadec31a9ee8792bfcaef1db2acf3ee1a737",
|
| 706 |
+
"state_sha256": "1da85f639f02e8a9a2fe41db83f7c951cef9a235466a340da3b4d94dfc2d8cfc"
|
| 707 |
+
},
|
| 708 |
+
"selected_epoch": 4,
|
| 709 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 710 |
+
"state_sha256": "03adfbec615f0493463f5404db8b8510dae1487145caa2c0ff17f5ba7e0b9aba",
|
| 711 |
+
"state_tensor_count": 149,
|
| 712 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 713 |
+
"training_result_sha256": "ebc41837d2f6351175a71f3752ad20e57c18138691fef0764b90f9c61d218452"
|
| 714 |
+
},
|
| 715 |
+
{
|
| 716 |
+
"backbone_state_sha256": "7b46c42e1a21ea63275edba2629205b85bd57d597e098782a51063f9d0232cf3",
|
| 717 |
+
"checkpoint": {
|
| 718 |
+
"bytes": 440154440,
|
| 719 |
+
"path": "checkpoints/source/ES/pt1/ft1/best.pt",
|
| 720 |
+
"sha256": "d43962d06f256000a8707dbc61e3d860dcebd4d50e0ac77b724ef921a79aae2c"
|
| 721 |
+
},
|
| 722 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 723 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 724 |
+
"head_state_sha256": "4d7cf2502b9de435fd76220dce1c0025078c9108dc36a356a2e3ec5d96e6542a",
|
| 725 |
+
"id": "ES-pt1-ft1",
|
| 726 |
+
"job": {
|
| 727 |
+
"condition": "ES",
|
| 728 |
+
"ft_seed": 1,
|
| 729 |
+
"pt_seed": 1,
|
| 730 |
+
"smoke": false
|
| 731 |
+
},
|
| 732 |
+
"kind": "source_classifier",
|
| 733 |
+
"pretraining_parent": {
|
| 734 |
+
"id": "ES-pt1",
|
| 735 |
+
"sha256": "2f357c92c20c633a636f936246bfeadec31a9ee8792bfcaef1db2acf3ee1a737",
|
| 736 |
+
"state_sha256": "1da85f639f02e8a9a2fe41db83f7c951cef9a235466a340da3b4d94dfc2d8cfc"
|
| 737 |
+
},
|
| 738 |
+
"selected_epoch": 2,
|
| 739 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 740 |
+
"state_sha256": "8cdfde8b4ee968701fbf1db71b87156286a73e089f2677a7ccaef2ee4447393f",
|
| 741 |
+
"state_tensor_count": 149,
|
| 742 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 743 |
+
"training_result_sha256": "9e857c2113a1f624cf471b8263f3451dbf901542ef40daf23fe3f993206a3019"
|
| 744 |
+
},
|
| 745 |
+
{
|
| 746 |
+
"backbone_state_sha256": "f9efb8be122a08e79d844826d229563070163f258f562cd2bc63d2e7042bc79a",
|
| 747 |
+
"checkpoint": {
|
| 748 |
+
"bytes": 440154440,
|
| 749 |
+
"path": "checkpoints/source/ES/pt1/ft2/best.pt",
|
| 750 |
+
"sha256": "fe879c8b4f45a84e08d728affc2c4cd6d28fb87b92cc8759b4ddc408f786d8f9"
|
| 751 |
+
},
|
| 752 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 753 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 754 |
+
"head_state_sha256": "af479f9e002a231cf4ae8fa4fa01cbb79c4f8fedd7e3b59be63adce2fe93986d",
|
| 755 |
+
"id": "ES-pt1-ft2",
|
| 756 |
+
"job": {
|
| 757 |
+
"condition": "ES",
|
| 758 |
+
"ft_seed": 2,
|
| 759 |
+
"pt_seed": 1,
|
| 760 |
+
"smoke": false
|
| 761 |
+
},
|
| 762 |
+
"kind": "source_classifier",
|
| 763 |
+
"pretraining_parent": {
|
| 764 |
+
"id": "ES-pt1",
|
| 765 |
+
"sha256": "2f357c92c20c633a636f936246bfeadec31a9ee8792bfcaef1db2acf3ee1a737",
|
| 766 |
+
"state_sha256": "1da85f639f02e8a9a2fe41db83f7c951cef9a235466a340da3b4d94dfc2d8cfc"
|
| 767 |
+
},
|
| 768 |
+
"selected_epoch": 5,
|
| 769 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 770 |
+
"state_sha256": "6293d8e506c62ed852f97562dd1a445c27f2c2c44f7cd15f45daa44251605e74",
|
| 771 |
+
"state_tensor_count": 149,
|
| 772 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 773 |
+
"training_result_sha256": "2294494d91cc41a3070ebe400dd57fb3caabb978a56b6d86965be366877bd423"
|
| 774 |
+
},
|
| 775 |
+
{
|
| 776 |
+
"backbone_state_sha256": "892a245d1d3d72d90f85b5226eb83121fbb0dee80da1bf3207517274d1b245e0",
|
| 777 |
+
"checkpoint": {
|
| 778 |
+
"bytes": 440154440,
|
| 779 |
+
"path": "checkpoints/source/EE/pt1/ft0/best.pt",
|
| 780 |
+
"sha256": "7e75b5380df75393dae4a125df812f6500288955ab92a20ef610eb15eaff646f"
|
| 781 |
+
},
|
| 782 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 783 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 784 |
+
"head_state_sha256": "cd55d0669416df9328d738f205a871fed93bace116f92be9b3e845dae373a271",
|
| 785 |
+
"id": "EE-pt1-ft0",
|
| 786 |
+
"job": {
|
| 787 |
+
"condition": "EE",
|
| 788 |
+
"ft_seed": 0,
|
| 789 |
+
"pt_seed": 1,
|
| 790 |
+
"smoke": false
|
| 791 |
+
},
|
| 792 |
+
"kind": "source_classifier",
|
| 793 |
+
"pretraining_parent": {
|
| 794 |
+
"id": "EE-pt1",
|
| 795 |
+
"sha256": "653a88903ee373e5b8933c71d386a64ca6840249f9a42cc2c992b0202f04739f",
|
| 796 |
+
"state_sha256": "2081069fd01c7c0d80bea6899bab92996f17480b375d625edb1e7095445ac622"
|
| 797 |
+
},
|
| 798 |
+
"selected_epoch": 1,
|
| 799 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 800 |
+
"state_sha256": "dc6722503f1fc078719712395780f49ecd49d24af0b36705d58b71578c5a4280",
|
| 801 |
+
"state_tensor_count": 149,
|
| 802 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 803 |
+
"training_result_sha256": "aae2eeddf0405a3fdc434db9f1ceaec2d827bde17692efaf55a9d5ad22d8bab9"
|
| 804 |
+
},
|
| 805 |
+
{
|
| 806 |
+
"backbone_state_sha256": "8b5e303a3c8d47c5237768c54371a42fc86b3ed37bac215e94fc6ffb727388e6",
|
| 807 |
+
"checkpoint": {
|
| 808 |
+
"bytes": 440154440,
|
| 809 |
+
"path": "checkpoints/source/EE/pt1/ft1/best.pt",
|
| 810 |
+
"sha256": "c869b1c0c8cf4288485936795fbb8263b5af55bc39fa9df0513758c5cbfd5a87"
|
| 811 |
+
},
|
| 812 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 813 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 814 |
+
"head_state_sha256": "8b4a07c619c5a583ea3a29c762262f1dd61cbf45b3c4f9638c5fbb13d390475d",
|
| 815 |
+
"id": "EE-pt1-ft1",
|
| 816 |
+
"job": {
|
| 817 |
+
"condition": "EE",
|
| 818 |
+
"ft_seed": 1,
|
| 819 |
+
"pt_seed": 1,
|
| 820 |
+
"smoke": false
|
| 821 |
+
},
|
| 822 |
+
"kind": "source_classifier",
|
| 823 |
+
"pretraining_parent": {
|
| 824 |
+
"id": "EE-pt1",
|
| 825 |
+
"sha256": "653a88903ee373e5b8933c71d386a64ca6840249f9a42cc2c992b0202f04739f",
|
| 826 |
+
"state_sha256": "2081069fd01c7c0d80bea6899bab92996f17480b375d625edb1e7095445ac622"
|
| 827 |
+
},
|
| 828 |
+
"selected_epoch": 4,
|
| 829 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 830 |
+
"state_sha256": "0a29cb65c4b2279ac65c69d30fa48730fcf3c443bfb699f648a155df8869d38b",
|
| 831 |
+
"state_tensor_count": 149,
|
| 832 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 833 |
+
"training_result_sha256": "07432909d3ef0b1a24860ffcb100289e54f54c1c38a85afacf4bafb260aa8fee"
|
| 834 |
+
},
|
| 835 |
+
{
|
| 836 |
+
"backbone_state_sha256": "4a2c9dd0f700196201949d044b6749533a5057cdf627010c2bf255e4dda42132",
|
| 837 |
+
"checkpoint": {
|
| 838 |
+
"bytes": 440154440,
|
| 839 |
+
"path": "checkpoints/source/EE/pt1/ft2/best.pt",
|
| 840 |
+
"sha256": "0db9423ef969016260d1ddbbf700d5bbc71340b6847e0c8ecf5e4696fa2bb732"
|
| 841 |
+
},
|
| 842 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 843 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 844 |
+
"head_state_sha256": "aa7e1329289dd57a8dec2a01220fad56337c3629ffdd1caf7f662f9c703f3c44",
|
| 845 |
+
"id": "EE-pt1-ft2",
|
| 846 |
+
"job": {
|
| 847 |
+
"condition": "EE",
|
| 848 |
+
"ft_seed": 2,
|
| 849 |
+
"pt_seed": 1,
|
| 850 |
+
"smoke": false
|
| 851 |
+
},
|
| 852 |
+
"kind": "source_classifier",
|
| 853 |
+
"pretraining_parent": {
|
| 854 |
+
"id": "EE-pt1",
|
| 855 |
+
"sha256": "653a88903ee373e5b8933c71d386a64ca6840249f9a42cc2c992b0202f04739f",
|
| 856 |
+
"state_sha256": "2081069fd01c7c0d80bea6899bab92996f17480b375d625edb1e7095445ac622"
|
| 857 |
+
},
|
| 858 |
+
"selected_epoch": 2,
|
| 859 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 860 |
+
"state_sha256": "5c324f5ab182218ec35c3a7dd4df800e900836ce5e8195e999d05a1a627e1beb",
|
| 861 |
+
"state_tensor_count": 149,
|
| 862 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 863 |
+
"training_result_sha256": "09c04fbc107c9759bf755851015d493bd51e0c86f379eb5512aef77c0fcb79f2"
|
| 864 |
+
},
|
| 865 |
+
{
|
| 866 |
+
"backbone_state_sha256": "5cec49bff5231109310f7657e16aae77fed7ee053a23a3ea02e18210df0b8e71",
|
| 867 |
+
"checkpoint": {
|
| 868 |
+
"bytes": 440154440,
|
| 869 |
+
"path": "checkpoints/source/EP/pt2/ft0/best.pt",
|
| 870 |
+
"sha256": "7ecaeba8d20e8f65b78a11412817da9cdaf84127c03765c1fb95a44442f921f4"
|
| 871 |
+
},
|
| 872 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 873 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 874 |
+
"head_state_sha256": "2540f121300980c92e16ea23a81233f991f176205f93aec2d3cb16e577e267ec",
|
| 875 |
+
"id": "EP-pt2-ft0",
|
| 876 |
+
"job": {
|
| 877 |
+
"condition": "EP",
|
| 878 |
+
"ft_seed": 0,
|
| 879 |
+
"pt_seed": 2,
|
| 880 |
+
"smoke": false
|
| 881 |
+
},
|
| 882 |
+
"kind": "source_classifier",
|
| 883 |
+
"pretraining_parent": {
|
| 884 |
+
"id": "EP-pt2",
|
| 885 |
+
"sha256": "a1285feb6eb6380bfedfe670a27e9f09b19163b33f76145cc008de0b1e223155",
|
| 886 |
+
"state_sha256": "76e0af261c311b5bd49ffe47e72e7065d4f2405f1213222bff12cb42817f3f87"
|
| 887 |
+
},
|
| 888 |
+
"selected_epoch": 1,
|
| 889 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 890 |
+
"state_sha256": "277347056d1b01883f3904a44b5a5811a0a9d4885e4e099deb2dc0e443e1dda9",
|
| 891 |
+
"state_tensor_count": 149,
|
| 892 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 893 |
+
"training_result_sha256": "f5493458ecf9bcfd654f07d1382fde315aa8edeffa219ed5fcdeb59664f0148e"
|
| 894 |
+
},
|
| 895 |
+
{
|
| 896 |
+
"backbone_state_sha256": "34a5a3529c4519d6cc2ef55ca15a9c8f22fb5b0951951d868238e335b8251a5f",
|
| 897 |
+
"checkpoint": {
|
| 898 |
+
"bytes": 440154440,
|
| 899 |
+
"path": "checkpoints/source/EP/pt2/ft1/best.pt",
|
| 900 |
+
"sha256": "34c588c5e10d7ba6c6320cc59cf883ad47465cdcf9a07d540a45e55720e993eb"
|
| 901 |
+
},
|
| 902 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 903 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 904 |
+
"head_state_sha256": "ece0a91d346641a5d5e035ea74f2d2bab123779aa23f5175297989f815c2e273",
|
| 905 |
+
"id": "EP-pt2-ft1",
|
| 906 |
+
"job": {
|
| 907 |
+
"condition": "EP",
|
| 908 |
+
"ft_seed": 1,
|
| 909 |
+
"pt_seed": 2,
|
| 910 |
+
"smoke": false
|
| 911 |
+
},
|
| 912 |
+
"kind": "source_classifier",
|
| 913 |
+
"pretraining_parent": {
|
| 914 |
+
"id": "EP-pt2",
|
| 915 |
+
"sha256": "a1285feb6eb6380bfedfe670a27e9f09b19163b33f76145cc008de0b1e223155",
|
| 916 |
+
"state_sha256": "76e0af261c311b5bd49ffe47e72e7065d4f2405f1213222bff12cb42817f3f87"
|
| 917 |
+
},
|
| 918 |
+
"selected_epoch": 4,
|
| 919 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 920 |
+
"state_sha256": "923cb47e0b918ffa2c6c449089c6d678aa60b876961e0bb317f80760032e7e40",
|
| 921 |
+
"state_tensor_count": 149,
|
| 922 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 923 |
+
"training_result_sha256": "f989b0df62e72edde1f5e253a0636a0973a265ce00641c55ced221a6c439d46e"
|
| 924 |
+
},
|
| 925 |
+
{
|
| 926 |
+
"backbone_state_sha256": "42b7478758a5b5aadebc220632e2223f60f60030a91474c9f9d0fc9db8c08687",
|
| 927 |
+
"checkpoint": {
|
| 928 |
+
"bytes": 440154440,
|
| 929 |
+
"path": "checkpoints/source/EP/pt2/ft2/best.pt",
|
| 930 |
+
"sha256": "c1af8f442b9e13944e2bb5158900c2f1ca824af7583ebcb5a365d6b6317cdd3f"
|
| 931 |
+
},
|
| 932 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 933 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 934 |
+
"head_state_sha256": "06928d7c19bf664d442b4a8c940e97685952d489b9afca318058fd50deb7611c",
|
| 935 |
+
"id": "EP-pt2-ft2",
|
| 936 |
+
"job": {
|
| 937 |
+
"condition": "EP",
|
| 938 |
+
"ft_seed": 2,
|
| 939 |
+
"pt_seed": 2,
|
| 940 |
+
"smoke": false
|
| 941 |
+
},
|
| 942 |
+
"kind": "source_classifier",
|
| 943 |
+
"pretraining_parent": {
|
| 944 |
+
"id": "EP-pt2",
|
| 945 |
+
"sha256": "a1285feb6eb6380bfedfe670a27e9f09b19163b33f76145cc008de0b1e223155",
|
| 946 |
+
"state_sha256": "76e0af261c311b5bd49ffe47e72e7065d4f2405f1213222bff12cb42817f3f87"
|
| 947 |
+
},
|
| 948 |
+
"selected_epoch": 2,
|
| 949 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 950 |
+
"state_sha256": "ad2bbfa5c830e6c29c07c6925db5f34fe3d94ceb1eee89015a1193a02d659d37",
|
| 951 |
+
"state_tensor_count": 149,
|
| 952 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 953 |
+
"training_result_sha256": "51cbf2fe41459089fb5967d69a40e5314456943530617e18ae86974e6744f4a9"
|
| 954 |
+
},
|
| 955 |
+
{
|
| 956 |
+
"backbone_state_sha256": "1a6e6d138b3859bc7b04fa1cba932e0757fd9d24e6bce2f443a9de9abd35f0fc",
|
| 957 |
+
"checkpoint": {
|
| 958 |
+
"bytes": 440154440,
|
| 959 |
+
"path": "checkpoints/source/ES/pt2/ft0/best.pt",
|
| 960 |
+
"sha256": "4e3193aba5334d7c1093a156b8dc72b3690ac3cce149373c7aa01958e2dceb73"
|
| 961 |
+
},
|
| 962 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 963 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 964 |
+
"head_state_sha256": "b9e5f287d9078622ffc96b4a95195c379d9ea8cdf5d3148da06be519a4777272",
|
| 965 |
+
"id": "ES-pt2-ft0",
|
| 966 |
+
"job": {
|
| 967 |
+
"condition": "ES",
|
| 968 |
+
"ft_seed": 0,
|
| 969 |
+
"pt_seed": 2,
|
| 970 |
+
"smoke": false
|
| 971 |
+
},
|
| 972 |
+
"kind": "source_classifier",
|
| 973 |
+
"pretraining_parent": {
|
| 974 |
+
"id": "ES-pt2",
|
| 975 |
+
"sha256": "e954373b086d2d3fe3b015440a185f4a146e01825007bc57cbcc609ed3d30254",
|
| 976 |
+
"state_sha256": "531f13ab25facf6a21f3a730dd3cbebc82d8f79aa24526fdde96f57dbd7097d9"
|
| 977 |
+
},
|
| 978 |
+
"selected_epoch": 4,
|
| 979 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 980 |
+
"state_sha256": "1e42c68537988297c3ca34b739231b86e27c3531b10461d2d5cb8a7f293c39c4",
|
| 981 |
+
"state_tensor_count": 149,
|
| 982 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 983 |
+
"training_result_sha256": "de3f41dac006cece0480313f3dbcd05d1ace0b1bb85473cbe50ac99f0aecbf99"
|
| 984 |
+
},
|
| 985 |
+
{
|
| 986 |
+
"backbone_state_sha256": "ddf2792b06f5a24061c1a815ded8be91593ed167e813be80ee87b8daa5c5c440",
|
| 987 |
+
"checkpoint": {
|
| 988 |
+
"bytes": 440154440,
|
| 989 |
+
"path": "checkpoints/source/ES/pt2/ft1/best.pt",
|
| 990 |
+
"sha256": "5509eb7ac7f77b3378874e9f5ceb2d51176ff1b175edaec8bd86449596335c48"
|
| 991 |
+
},
|
| 992 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 993 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 994 |
+
"head_state_sha256": "b9620ddc3c45f58f7d49fb211744029068cc4f461f350aca25827c91cf00c1b7",
|
| 995 |
+
"id": "ES-pt2-ft1",
|
| 996 |
+
"job": {
|
| 997 |
+
"condition": "ES",
|
| 998 |
+
"ft_seed": 1,
|
| 999 |
+
"pt_seed": 2,
|
| 1000 |
+
"smoke": false
|
| 1001 |
+
},
|
| 1002 |
+
"kind": "source_classifier",
|
| 1003 |
+
"pretraining_parent": {
|
| 1004 |
+
"id": "ES-pt2",
|
| 1005 |
+
"sha256": "e954373b086d2d3fe3b015440a185f4a146e01825007bc57cbcc609ed3d30254",
|
| 1006 |
+
"state_sha256": "531f13ab25facf6a21f3a730dd3cbebc82d8f79aa24526fdde96f57dbd7097d9"
|
| 1007 |
+
},
|
| 1008 |
+
"selected_epoch": 2,
|
| 1009 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 1010 |
+
"state_sha256": "572ab4979350470329ffa11a1588c3c8732071b90f0b59ae9d9fc56c3c2f40a5",
|
| 1011 |
+
"state_tensor_count": 149,
|
| 1012 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 1013 |
+
"training_result_sha256": "f7634a33e3ef27f1744a77dcb02cb1e301b49978185a21f527aa6a95ce9511e5"
|
| 1014 |
+
},
|
| 1015 |
+
{
|
| 1016 |
+
"backbone_state_sha256": "bda43b7b2920f13c9cbcdcfec2937cf57e3817deaf11a1dc22a83e217509d49f",
|
| 1017 |
+
"checkpoint": {
|
| 1018 |
+
"bytes": 440154440,
|
| 1019 |
+
"path": "checkpoints/source/ES/pt2/ft2/best.pt",
|
| 1020 |
+
"sha256": "bbe4ea6d3953fb9c4e954952c7deb3cbbfde9ad102de1c797fcb35333e4e41e5"
|
| 1021 |
+
},
|
| 1022 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 1023 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 1024 |
+
"head_state_sha256": "5307fc528cfce750104759418259f9708bc2187e3c62db0667249d403f7e637c",
|
| 1025 |
+
"id": "ES-pt2-ft2",
|
| 1026 |
+
"job": {
|
| 1027 |
+
"condition": "ES",
|
| 1028 |
+
"ft_seed": 2,
|
| 1029 |
+
"pt_seed": 2,
|
| 1030 |
+
"smoke": false
|
| 1031 |
+
},
|
| 1032 |
+
"kind": "source_classifier",
|
| 1033 |
+
"pretraining_parent": {
|
| 1034 |
+
"id": "ES-pt2",
|
| 1035 |
+
"sha256": "e954373b086d2d3fe3b015440a185f4a146e01825007bc57cbcc609ed3d30254",
|
| 1036 |
+
"state_sha256": "531f13ab25facf6a21f3a730dd3cbebc82d8f79aa24526fdde96f57dbd7097d9"
|
| 1037 |
+
},
|
| 1038 |
+
"selected_epoch": 2,
|
| 1039 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 1040 |
+
"state_sha256": "0a5566ddf15c0ede4cb0f426c65f306b500f1d06990ab8dd30594c45351f98fc",
|
| 1041 |
+
"state_tensor_count": 149,
|
| 1042 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 1043 |
+
"training_result_sha256": "b766d4109670f9b379f9ccb9555dcdfb737b710aea733bad1b2108a66b50b353"
|
| 1044 |
+
},
|
| 1045 |
+
{
|
| 1046 |
+
"backbone_state_sha256": "6bafb6cdbdbe0e7605f56fb89916075cd9fab07eac1f55878b33f21ad0f0deb1",
|
| 1047 |
+
"checkpoint": {
|
| 1048 |
+
"bytes": 440154440,
|
| 1049 |
+
"path": "checkpoints/source/EE/pt2/ft0/best.pt",
|
| 1050 |
+
"sha256": "92946799e5a378609b6dae042db4c263e53fd8123f101102a3e50b1c8a694b1a"
|
| 1051 |
+
},
|
| 1052 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 1053 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 1054 |
+
"head_state_sha256": "042e8bd55fa3a70ee7322751e5aa6a9553c0c170740ade25656de18072cd92bd",
|
| 1055 |
+
"id": "EE-pt2-ft0",
|
| 1056 |
+
"job": {
|
| 1057 |
+
"condition": "EE",
|
| 1058 |
+
"ft_seed": 0,
|
| 1059 |
+
"pt_seed": 2,
|
| 1060 |
+
"smoke": false
|
| 1061 |
+
},
|
| 1062 |
+
"kind": "source_classifier",
|
| 1063 |
+
"pretraining_parent": {
|
| 1064 |
+
"id": "EE-pt2",
|
| 1065 |
+
"sha256": "68e49c6af5cb3fa34b1820925cb1751055c38c25de8122b5ba19a40937ad0ba9",
|
| 1066 |
+
"state_sha256": "7b2de62c97d190cced9341476a36d0d281805c6f163f908099e7b600582897ea"
|
| 1067 |
+
},
|
| 1068 |
+
"selected_epoch": 4,
|
| 1069 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 1070 |
+
"state_sha256": "b1d17fffef0c2f464c5b085cced5319dabda23713f98c8ea3049743f4e0e62b8",
|
| 1071 |
+
"state_tensor_count": 149,
|
| 1072 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 1073 |
+
"training_result_sha256": "c2da98507c582107c17e22bb2716d4521801514a2404e7f41062e0cf7c514dcc"
|
| 1074 |
+
},
|
| 1075 |
+
{
|
| 1076 |
+
"backbone_state_sha256": "3ad28c6dcf2c4cd47057cc9c45c97e853b2986a0cee6ff8c12c4f0ef504ea3a5",
|
| 1077 |
+
"checkpoint": {
|
| 1078 |
+
"bytes": 440154440,
|
| 1079 |
+
"path": "checkpoints/source/EE/pt2/ft1/best.pt",
|
| 1080 |
+
"sha256": "3879fab3b33328347f852ac813bbc194be808526b4b97b1613292126b56f7751"
|
| 1081 |
+
},
|
| 1082 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 1083 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 1084 |
+
"head_state_sha256": "065531cd87316409c14083b53d208ac1fd9743a805c472d0cd09bcd635acae70",
|
| 1085 |
+
"id": "EE-pt2-ft1",
|
| 1086 |
+
"job": {
|
| 1087 |
+
"condition": "EE",
|
| 1088 |
+
"ft_seed": 1,
|
| 1089 |
+
"pt_seed": 2,
|
| 1090 |
+
"smoke": false
|
| 1091 |
+
},
|
| 1092 |
+
"kind": "source_classifier",
|
| 1093 |
+
"pretraining_parent": {
|
| 1094 |
+
"id": "EE-pt2",
|
| 1095 |
+
"sha256": "68e49c6af5cb3fa34b1820925cb1751055c38c25de8122b5ba19a40937ad0ba9",
|
| 1096 |
+
"state_sha256": "7b2de62c97d190cced9341476a36d0d281805c6f163f908099e7b600582897ea"
|
| 1097 |
+
},
|
| 1098 |
+
"selected_epoch": 4,
|
| 1099 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 1100 |
+
"state_sha256": "8b6d74f95cefdb63cf9d8d2634689152687797fc480bae1756c12c3447257792",
|
| 1101 |
+
"state_tensor_count": 149,
|
| 1102 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 1103 |
+
"training_result_sha256": "3993f66eec458e2d47994a4f04d63694698aa9c605186c8b749d7cfda62f46f4"
|
| 1104 |
+
},
|
| 1105 |
+
{
|
| 1106 |
+
"backbone_state_sha256": "7ba012459b15d25e49bfa6a31e83494f3d201a2abf4e736b2fedbef1ff76472e",
|
| 1107 |
+
"checkpoint": {
|
| 1108 |
+
"bytes": 440154440,
|
| 1109 |
+
"path": "checkpoints/source/EE/pt2/ft2/best.pt",
|
| 1110 |
+
"sha256": "c2fcac930e4a69d8138dc508ca4471f52be6ce76c8a90efd819b0780f73225b5"
|
| 1111 |
+
},
|
| 1112 |
+
"config_sha256": "3e9e1f209ac83fa7b67a3ed566d7266c61f7bd4e4100a66d329810b0a866a6b2",
|
| 1113 |
+
"head_description": "two-logit bias-free linear score.weight (2 x 768)",
|
| 1114 |
+
"head_state_sha256": "76a717c181c2186b0142b5e09329c5365fe7569a0652a486d38beba576a7f5b9",
|
| 1115 |
+
"id": "EE-pt2-ft2",
|
| 1116 |
+
"job": {
|
| 1117 |
+
"condition": "EE",
|
| 1118 |
+
"ft_seed": 2,
|
| 1119 |
+
"pt_seed": 2,
|
| 1120 |
+
"smoke": false
|
| 1121 |
+
},
|
| 1122 |
+
"kind": "source_classifier",
|
| 1123 |
+
"pretraining_parent": {
|
| 1124 |
+
"id": "EE-pt2",
|
| 1125 |
+
"sha256": "68e49c6af5cb3fa34b1820925cb1751055c38c25de8122b5ba19a40937ad0ba9",
|
| 1126 |
+
"state_sha256": "7b2de62c97d190cced9341476a36d0d281805c6f163f908099e7b600582897ea"
|
| 1127 |
+
},
|
| 1128 |
+
"selected_epoch": 4,
|
| 1129 |
+
"selection": "minimum source validation CE; ties earlier epoch",
|
| 1130 |
+
"state_sha256": "bc4ea0f5bb08aa2589a3e6ed714f2228522cc07189d89cc705a1abf562a489d2",
|
| 1131 |
+
"state_tensor_count": 149,
|
| 1132 |
+
"tokenizer_sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 1133 |
+
"training_result_sha256": "7d89dd8f1e7ef94c867f444024111e0f3f41ab8769ed5fd566b876de8d256940"
|
| 1134 |
+
}
|
| 1135 |
+
],
|
| 1136 |
+
"prepared_manifest_sha256": "2ea23ffd2793ed2142156f2942cc4bfb77767a0c3e87ba668a77c34a3a16c010",
|
| 1137 |
+
"release_id": "bio2nl-2026-10-02-models-v1",
|
| 1138 |
+
"schema_version": 1,
|
| 1139 |
+
"source_assets_manifest_sha256": "c6341ac0e8a810fa807d46d45c9358e189290a37af5870136bfcbd504b1efdd5",
|
| 1140 |
+
"source_selection_sha256": "48de918e0b4a2b12ac3021072f601e2b1caf61730c77097fa9bfbfc75e15fb4c",
|
| 1141 |
+
"tokenizer": {
|
| 1142 |
+
"bytes": 2122913,
|
| 1143 |
+
"path": "tokenizer.json",
|
| 1144 |
+
"sha256": "1bb8092348368961ca211cbf4d066a0e0ebf612b35b401b07ed173476088130b",
|
| 1145 |
+
"special_tokens": [
|
| 1146 |
+
"<|pad_v2|>",
|
| 1147 |
+
"<|eos_v2|>",
|
| 1148 |
+
"<|pair_v2|>",
|
| 1149 |
+
"<|unk_v2|>"
|
| 1150 |
+
],
|
| 1151 |
+
"training_recipe": "Shared byte-level BPE trained on 16 MiB English and 16 MiB protein training text; historical v2 tokenizer reused",
|
| 1152 |
+
"vocab_size": 32000
|
| 1153 |
+
},
|
| 1154 |
+
"training_protocol_sha256": "60ce5e0518475fb0e4ba8a83d34d45fbe4c89e74e12fb984abbe41c8fd3eff24",
|
| 1155 |
+
"weight_license_status": "unassigned; no license grant is inferred from code or training-data licenses"
|
| 1156 |
+
}
|
portable_core.py
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Portable GPT-2 models for the frozen joint-pretraining experiment.
|
| 2 |
+
|
| 3 |
+
No workspace paths, legacy module imports, downloads or device initialization are
|
| 4 |
+
performed at import time. Checkpoints are accepted only with independently trusted
|
| 5 |
+
file, tensor-state, job and provenance identities. The caller supplies those
|
| 6 |
+
identities from the verified archive; a hash read from the checkpoint itself is
|
| 7 |
+
not an independent trust anchor.
|
| 8 |
+
"""
|
| 9 |
+
from __future__ import annotations
|
| 10 |
+
|
| 11 |
+
from contextlib import nullcontext
|
| 12 |
+
import hashlib
|
| 13 |
+
import json
|
| 14 |
+
from pathlib import Path
|
| 15 |
+
import re
|
| 16 |
+
from typing import Mapping
|
| 17 |
+
|
| 18 |
+
import numpy as np
|
| 19 |
+
import torch
|
| 20 |
+
from torch import nn
|
| 21 |
+
from torch.nn import functional as F
|
| 22 |
+
from transformers import GPT2Config, GPT2LMHeadModel, GPT2Model
|
| 23 |
+
|
| 24 |
+
|
| 25 |
+
def require(condition, message):
|
| 26 |
+
if not condition:
|
| 27 |
+
raise ValueError(message)
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
def _sha256(value, name):
|
| 31 |
+
require(isinstance(value, str) and re.fullmatch(r"[0-9a-f]{64}", value) is not None,
|
| 32 |
+
"Invalid " + name)
|
| 33 |
+
return value
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
def state_digest(state):
|
| 37 |
+
"""Exact legacy name/dtype/shape framing, including all tied aliases."""
|
| 38 |
+
digest = hashlib.sha256()
|
| 39 |
+
require(isinstance(state, Mapping) and bool(state), "Empty or invalid tensor state")
|
| 40 |
+
require(all(isinstance(name, str) and torch.is_tensor(value)
|
| 41 |
+
for name, value in state.items()), "Invalid tensor-state entry")
|
| 42 |
+
for name, tensor in sorted(state.items()):
|
| 43 |
+
value = tensor.detach().cpu().contiguous()
|
| 44 |
+
header = json.dumps([name, str(value.dtype), list(value.shape)], separators=(",", ":")).encode()
|
| 45 |
+
digest.update(len(header).to_bytes(8, "big"))
|
| 46 |
+
digest.update(header)
|
| 47 |
+
data = value.numpy().tobytes()
|
| 48 |
+
digest.update(len(data).to_bytes(8, "big"))
|
| 49 |
+
digest.update(data)
|
| 50 |
+
return digest.hexdigest()
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def snapshot_state(model):
|
| 54 |
+
"""Copy finite FP32 tensors to CPU while retaining exact shared aliases."""
|
| 55 |
+
aliases, result = {}, {}
|
| 56 |
+
for name, tensor in model.state_dict().items():
|
| 57 |
+
require(tensor.dtype == torch.float32 and torch.isfinite(tensor).all().item(),
|
| 58 |
+
"Invalid/nonfinite FP32 state: " + name)
|
| 59 |
+
key = (tensor.data_ptr(), tuple(tensor.shape), tuple(tensor.stride()), str(tensor.dtype))
|
| 60 |
+
if key not in aliases:
|
| 61 |
+
aliases[key] = tensor.detach().cpu().clone().contiguous()
|
| 62 |
+
result[name] = aliases[key]
|
| 63 |
+
return result
|
| 64 |
+
|
| 65 |
+
|
| 66 |
+
def _seed(seed):
|
| 67 |
+
require(type(seed) is int and seed >= 0, "Seed must be a nonnegative integer")
|
| 68 |
+
return seed
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
def make_config(design):
|
| 72 |
+
"""Construct the offline architecture described by the frozen protocol."""
|
| 73 |
+
pretraining, tokenizer = design["pretraining"], design["tokenizer"]
|
| 74 |
+
values = dict(pretraining["architecture"])
|
| 75 |
+
require(values.pop("model_type", "gpt2") == "gpt2", "Only GPT-2 is supported")
|
| 76 |
+
config = GPT2Config(**values, vocab_size=tokenizer["vocab_size"],
|
| 77 |
+
n_positions=pretraining["context_length"], n_ctx=pretraining["context_length"],
|
| 78 |
+
bos_token_id=tokenizer["eos_token_id"], eos_token_id=tokenizer["eos_token_id"],
|
| 79 |
+
pad_token_id=tokenizer["pad_token_id"])
|
| 80 |
+
config._attn_implementation = "sdpa"
|
| 81 |
+
config.use_cache = False
|
| 82 |
+
return config
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
def create_pretraining_model(design, seed):
|
| 86 |
+
"""Create a fresh FP32 LM without consuming the caller's CPU/GPU RNG."""
|
| 87 |
+
with torch.random.fork_rng(devices=[]):
|
| 88 |
+
torch.random.default_generator.manual_seed(_seed(seed))
|
| 89 |
+
return GPT2LMHeadModel(make_config(design)).float()
|
| 90 |
+
|
| 91 |
+
|
| 92 |
+
class TransferClassifier(nn.Module):
|
| 93 |
+
"""Original backbone/score state names and mask-based final-token pooling."""
|
| 94 |
+
|
| 95 |
+
def __init__(self, backbone, head_seed):
|
| 96 |
+
super().__init__()
|
| 97 |
+
if isinstance(backbone, GPT2LMHeadModel):
|
| 98 |
+
backbone = backbone.transformer
|
| 99 |
+
if not isinstance(backbone, GPT2Model):
|
| 100 |
+
raise TypeError("Expected GPT2Model or GPT2LMHeadModel")
|
| 101 |
+
self.backbone = backbone
|
| 102 |
+
with torch.random.fork_rng(devices=[]):
|
| 103 |
+
torch.random.default_generator.manual_seed(_seed(head_seed))
|
| 104 |
+
self.score = nn.Linear(backbone.config.n_embd, 2, bias=False, device="cpu", dtype=torch.float32)
|
| 105 |
+
nn.init.normal_(self.score.weight, std=0.02)
|
| 106 |
+
reference = next(backbone.parameters())
|
| 107 |
+
self.score.to(device=reference.device, dtype=reference.dtype)
|
| 108 |
+
|
| 109 |
+
def forward(self, input_ids, attention_mask):
|
| 110 |
+
require(input_ids.ndim == 2 and input_ids.shape == attention_mask.shape,
|
| 111 |
+
"Input/mask dimensions differ")
|
| 112 |
+
require(input_ids.shape[0] > 0 and input_ids.shape[1] > 0 and
|
| 113 |
+
torch.all((attention_mask == 0) | (attention_mask == 1)).item() and
|
| 114 |
+
torch.all(attention_mask.sum(1) > 0).item(), "Invalid or empty attention mask")
|
| 115 |
+
hidden = self.backbone(input_ids=input_ids, attention_mask=attention_mask,
|
| 116 |
+
use_cache=False, return_dict=True).last_hidden_state
|
| 117 |
+
positions = torch.arange(input_ids.shape[1], device=input_ids.device).expand_as(input_ids)
|
| 118 |
+
last = positions.masked_fill(attention_mask == 0, -1).amax(dim=1)
|
| 119 |
+
return self.score(hidden[torch.arange(input_ids.shape[0], device=input_ids.device), last])
|
| 120 |
+
|
| 121 |
+
|
| 122 |
+
def create_classifier(lm, fine_tuning_seed):
|
| 123 |
+
"""Reuse the complete LM backbone and initialize only the two-logit head."""
|
| 124 |
+
require(isinstance(lm, GPT2LMHeadModel), "SFT must start from a complete GPT-2 LM")
|
| 125 |
+
return TransferClassifier(lm, fine_tuning_seed).float()
|
| 126 |
+
|
| 127 |
+
|
| 128 |
+
def load_checkpoint(path, *, expected_sha256, expected_kind, expected_job,
|
| 129 |
+
expected_state_sha256, expected_protocol_sha256, expected_manifest_sha256,
|
| 130 |
+
expected_epoch=None, expected_config=None):
|
| 131 |
+
"""Safely load a trusted frozen checkpoint on CPU with exact provenance.
|
| 132 |
+
|
| 133 |
+
The file SHA is checked on the same open file handle used for weights-only
|
| 134 |
+
deserialization. There is deliberately no unsafe pickle fallback. Returned
|
| 135 |
+
models are in evaluation mode with gradients disabled; training from a new
|
| 136 |
+
initialization uses the constructors above.
|
| 137 |
+
"""
|
| 138 |
+
for value, name in ((expected_sha256, "file SHA-256"),
|
| 139 |
+
(expected_state_sha256, "state SHA-256"),
|
| 140 |
+
(expected_protocol_sha256, "protocol SHA-256"),
|
| 141 |
+
(expected_manifest_sha256, "manifest SHA-256")):
|
| 142 |
+
_sha256(value, name)
|
| 143 |
+
require(expected_kind in ("causal_lm", "source_classifier"), "Invalid expected checkpoint kind")
|
| 144 |
+
require(isinstance(expected_job, dict) and bool(expected_job), "Expected job identity is required")
|
| 145 |
+
require(expected_epoch is None or (type(expected_epoch) is int and expected_epoch > 0),
|
| 146 |
+
"Invalid expected epoch")
|
| 147 |
+
with Path(path).open("rb") as stream:
|
| 148 |
+
digest = hashlib.sha256()
|
| 149 |
+
for chunk in iter(lambda: stream.read(4 * 1024 * 1024), b""):
|
| 150 |
+
digest.update(chunk)
|
| 151 |
+
require(digest.hexdigest() == expected_sha256, "Checkpoint file SHA-256 differs")
|
| 152 |
+
stream.seek(0)
|
| 153 |
+
payload = torch.load(stream, map_location="cpu", weights_only=True)
|
| 154 |
+
require(isinstance(payload, dict) and type(payload.get("schema_version")) is int and
|
| 155 |
+
payload["schema_version"] == 1 and payload.get("kind") == expected_kind,
|
| 156 |
+
"Invalid checkpoint schema/kind")
|
| 157 |
+
metadata, config_values, state = payload.get("metadata"), payload.get("config"), payload.get("state_dict")
|
| 158 |
+
require(isinstance(metadata, dict) and isinstance(config_values, dict), "Invalid checkpoint metadata/config")
|
| 159 |
+
require(metadata.get("job") == expected_job, "Checkpoint job differs")
|
| 160 |
+
require(metadata.get("protocol_sha256") == expected_protocol_sha256, "Checkpoint protocol differs")
|
| 161 |
+
require(metadata.get("prepared_manifest_sha256") == expected_manifest_sha256, "Checkpoint manifest differs")
|
| 162 |
+
require(expected_epoch is None or metadata.get("epoch") == expected_epoch, "Checkpoint epoch differs")
|
| 163 |
+
require(payload.get("state_sha256") == expected_state_sha256, "Checkpoint declared state differs")
|
| 164 |
+
require(isinstance(state, Mapping) and bool(state) and
|
| 165 |
+
all(isinstance(name, str) and torch.is_tensor(value) and value.dtype == torch.float32
|
| 166 |
+
and torch.isfinite(value).all().item() for name, value in state.items()),
|
| 167 |
+
"Invalid/nonfinite FP32 checkpoint state")
|
| 168 |
+
require(state_digest(state) == expected_state_sha256, "Checkpoint tensor-state SHA-256 differs")
|
| 169 |
+
require(config_values.get("model_type", "gpt2") == "gpt2", "Invalid checkpoint architecture")
|
| 170 |
+
if expected_config is not None:
|
| 171 |
+
require(isinstance(expected_config, Mapping) and bool(expected_config), "Invalid expected config")
|
| 172 |
+
require(all(config_values.get(key) == value for key, value in expected_config.items()),
|
| 173 |
+
"Checkpoint config differs")
|
| 174 |
+
config = GPT2Config.from_dict(config_values)
|
| 175 |
+
config._attn_implementation = "sdpa"
|
| 176 |
+
config.use_cache = False
|
| 177 |
+
with torch.random.fork_rng(devices=[]):
|
| 178 |
+
if expected_kind == "causal_lm":
|
| 179 |
+
model = GPT2LMHeadModel(config)
|
| 180 |
+
else:
|
| 181 |
+
model = TransferClassifier(GPT2Model(config), 0)
|
| 182 |
+
model.load_state_dict(state, strict=True)
|
| 183 |
+
require(state_digest(model.state_dict()) == expected_state_sha256, "Reloaded model state differs")
|
| 184 |
+
model.float().eval().requires_grad_(False)
|
| 185 |
+
return model, payload
|
| 186 |
+
|
| 187 |
+
|
| 188 |
+
def _as_numpy(value):
|
| 189 |
+
return value.detach().cpu().numpy() if torch.is_tensor(value) else np.asarray(value)
|
| 190 |
+
|
| 191 |
+
|
| 192 |
+
def validate_arrays(arrays, config):
|
| 193 |
+
"""Reject inconsistent encodings without silently changing any input row."""
|
| 194 |
+
require(isinstance(arrays, Mapping) and {"input_ids", "attention_mask", "labels"} <= arrays.keys(),
|
| 195 |
+
"Missing encoded arrays")
|
| 196 |
+
values = {name: _as_numpy(arrays[name]) for name in ("input_ids", "attention_mask", "labels")}
|
| 197 |
+
ids, mask, labels = (values[name] for name in ("input_ids", "attention_mask", "labels"))
|
| 198 |
+
require(all(value.dtype == np.int64 for value in values.values()), "Encoded arrays must be int64")
|
| 199 |
+
require(ids.ndim == 2 and ids.shape == mask.shape and labels.shape == (len(ids),) and
|
| 200 |
+
len(ids) > 0 and 0 < ids.shape[1] <= config.n_positions, "Invalid encoded array dimensions")
|
| 201 |
+
require(np.all((ids >= 0) & (ids < config.vocab_size)), "Token ID outside vocabulary")
|
| 202 |
+
require(np.all((mask == 0) | (mask == 1)) and np.all(mask.sum(1) > 0) and
|
| 203 |
+
np.all(np.diff(mask, axis=1) <= 0), "Expected nonempty right-padded binary masks")
|
| 204 |
+
require(np.all((labels == 0) | (labels == 1)), "Expected binary labels")
|
| 205 |
+
return values
|
| 206 |
+
|
| 207 |
+
|
| 208 |
+
@torch.inference_mode()
|
| 209 |
+
def predict_source(model, arrays, batch_size=32, device="cpu", precision="float32"):
|
| 210 |
+
"""Fixed-head inference; label 1 direction and argmax ties to label 0."""
|
| 211 |
+
require(isinstance(model, TransferClassifier), "Expected a complete source classifier")
|
| 212 |
+
require(type(batch_size) is int and batch_size > 0, "Invalid batch size")
|
| 213 |
+
device = torch.device(device)
|
| 214 |
+
require((device.type == "cpu" and precision == "float32") or
|
| 215 |
+
(device.type == "cuda" and precision == "bfloat16"), "Explicit CPU FP32 or CUDA BF16 required")
|
| 216 |
+
if device.type == "cuda":
|
| 217 |
+
require(torch.cuda.is_available() and torch.cuda.is_bf16_supported(), "CUDA BF16 unavailable")
|
| 218 |
+
require(not torch.backends.cuda.matmul.allow_tf32 and not torch.backends.cudnn.allow_tf32,
|
| 219 |
+
"TF32 must be disabled for fixed scoring")
|
| 220 |
+
if device.index is None:
|
| 221 |
+
device = torch.device("cuda", torch.cuda.current_device())
|
| 222 |
+
require(all(parameter.device == device and parameter.dtype == torch.float32
|
| 223 |
+
for parameter in model.parameters()), "Model must already be FP32 on the explicit device")
|
| 224 |
+
values = validate_arrays(arrays, model.backbone.config)
|
| 225 |
+
model.eval()
|
| 226 |
+
chunks = []
|
| 227 |
+
for start in range(0, len(values["labels"]), batch_size):
|
| 228 |
+
stop = min(start + batch_size, len(values["labels"]))
|
| 229 |
+
batch_mask = values["attention_mask"][start:stop]
|
| 230 |
+
maximum = int(batch_mask.sum(1).max())
|
| 231 |
+
width = min(batch_mask.shape[1], ((maximum + 7) // 8) * 8)
|
| 232 |
+
ids = torch.as_tensor(values["input_ids"][start:stop, :width], device=device)
|
| 233 |
+
mask = torch.as_tensor(batch_mask[:, :width], device=device)
|
| 234 |
+
context = torch.autocast("cuda", dtype=torch.bfloat16) if device.type == "cuda" else nullcontext()
|
| 235 |
+
with context:
|
| 236 |
+
logits = model(ids, mask)
|
| 237 |
+
logp = F.log_softmax(logits.float(), dim=-1)
|
| 238 |
+
require(torch.isfinite(logp).all().item(), "Nonfinite source predictions")
|
| 239 |
+
chunks.append(logp.cpu().numpy().astype(np.float64))
|
| 240 |
+
logp = np.concatenate(chunks)
|
| 241 |
+
return {"labels": values["labels"].copy(), "log_probabilities": logp, "predictions": logp.argmax(1)}
|
requirements-inference.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
numpy==2.2.6
|
| 2 |
+
torch==2.3.0
|
| 3 |
+
transformers==4.45.2
|
| 4 |
+
tokenizers==0.20.0
|
test_audit.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"code_sha256": {
|
| 3 |
+
"inference.py": "43f5a1c770354b588b046ff02e4d03df4c13086224df4fba1285f8f2b3cf91ec",
|
| 4 |
+
"portable_core.py": "b2362edf8850fe20fbd23cc958a71f92ac2a187de4316f53f8750d3bca857592",
|
| 5 |
+
"test_inference.py": "26a8dd9c94fee295a7ba20ae65da922975f6ee1a66ad9f500fea16c8ad63f3d8"
|
| 6 |
+
},
|
| 7 |
+
"completed_at_utc": "2026-10-03T08:22:52.059505+00:00",
|
| 8 |
+
"errors": 0,
|
| 9 |
+
"failures": 0,
|
| 10 |
+
"status": "passed",
|
| 11 |
+
"tests_run": 17
|
| 12 |
+
}
|
test_inference.py
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Integrity/adversarial tests; no large models, GPU or training required."""
|
| 2 |
+
import copy
|
| 3 |
+
import json
|
| 4 |
+
from pathlib import Path
|
| 5 |
+
import tempfile
|
| 6 |
+
import unittest
|
| 7 |
+
|
| 8 |
+
import numpy as np
|
| 9 |
+
import torch
|
| 10 |
+
from transformers import GPT2Config, GPT2Model
|
| 11 |
+
|
| 12 |
+
import inference as api
|
| 13 |
+
import portable_core as core
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
HERE = Path(__file__).resolve().parent
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
class IntegrityTests(unittest.TestCase):
|
| 20 |
+
@classmethod
|
| 21 |
+
def setUpClass(cls):
|
| 22 |
+
torch.set_num_threads(2)
|
| 23 |
+
|
| 24 |
+
def setUp(self):
|
| 25 |
+
self.temp = tempfile.TemporaryDirectory()
|
| 26 |
+
self.root = Path(self.temp.name)
|
| 27 |
+
cfg = GPT2Config(vocab_size=37, n_positions=32, n_ctx=32, n_embd=16, n_layer=1, n_head=2,
|
| 28 |
+
n_inner=32, eos_token_id=1, pad_token_id=0)
|
| 29 |
+
cfg._attn_implementation = "sdpa"
|
| 30 |
+
model = core.TransferClassifier(GPT2Model(cfg), 0)
|
| 31 |
+
self.payload = {"schema_version": 1, "kind": "source_classifier", "config": cfg.to_dict(),
|
| 32 |
+
"metadata": {"job": {"condition": "EP", "pt_seed": 0, "ft_seed": 0, "smoke": False},
|
| 33 |
+
"protocol_sha256": "a" * 64, "prepared_manifest_sha256": "b" * 64, "epoch": 2},
|
| 34 |
+
"state_dict": core.snapshot_state(model)}
|
| 35 |
+
self.path = self.root / "toy.pt"
|
| 36 |
+
self.save()
|
| 37 |
+
|
| 38 |
+
def tearDown(self):
|
| 39 |
+
self.temp.cleanup()
|
| 40 |
+
|
| 41 |
+
def save(self):
|
| 42 |
+
self.payload["state_sha256"] = core.state_digest(self.payload["state_dict"])
|
| 43 |
+
torch.save(self.payload, self.path)
|
| 44 |
+
self.kw = dict(expected_sha256=api.file_sha(self.path), expected_kind="source_classifier",
|
| 45 |
+
expected_job=self.payload["metadata"]["job"], expected_state_sha256=self.payload["state_sha256"],
|
| 46 |
+
expected_protocol_sha256="a" * 64, expected_manifest_sha256="b" * 64, expected_epoch=2,
|
| 47 |
+
expected_config=self.payload["config"])
|
| 48 |
+
|
| 49 |
+
def test_intact_reloads(self):
|
| 50 |
+
model, payload = core.load_checkpoint(self.path, **self.kw)
|
| 51 |
+
self.assertEqual(core.state_digest(model.state_dict()), payload["state_sha256"])
|
| 52 |
+
self.assertFalse(model.training)
|
| 53 |
+
self.assertTrue(all(not x.requires_grad for x in model.parameters()))
|
| 54 |
+
|
| 55 |
+
def test_corrupt_file_rejected(self):
|
| 56 |
+
with self.path.open("ab") as stream:
|
| 57 |
+
stream.write(b"tampered")
|
| 58 |
+
with self.assertRaisesRegex(ValueError, "file SHA"):
|
| 59 |
+
core.load_checkpoint(self.path, **self.kw)
|
| 60 |
+
|
| 61 |
+
def test_missing_head_rejected_even_with_new_digest(self):
|
| 62 |
+
del self.payload["state_dict"]["score.weight"]
|
| 63 |
+
self.save()
|
| 64 |
+
with self.assertRaises(RuntimeError):
|
| 65 |
+
core.load_checkpoint(self.path, **self.kw)
|
| 66 |
+
|
| 67 |
+
def test_wrong_head_shape_rejected_even_with_new_digest(self):
|
| 68 |
+
self.payload["state_dict"]["score.weight"] = torch.zeros(3, 16)
|
| 69 |
+
self.save()
|
| 70 |
+
with self.assertRaises(RuntimeError):
|
| 71 |
+
core.load_checkpoint(self.path, **self.kw)
|
| 72 |
+
|
| 73 |
+
def test_provenance_rejected(self):
|
| 74 |
+
for key in ("expected_protocol_sha256", "expected_manifest_sha256", "expected_state_sha256"):
|
| 75 |
+
changed = dict(self.kw, **{key: "c" * 64})
|
| 76 |
+
with self.assertRaises(ValueError):
|
| 77 |
+
core.load_checkpoint(self.path, **changed)
|
| 78 |
+
|
| 79 |
+
def test_wrong_job_rejected(self):
|
| 80 |
+
changed = dict(self.kw, expected_job={**self.kw["expected_job"], "ft_seed": 1})
|
| 81 |
+
with self.assertRaisesRegex(ValueError, "job differs"):
|
| 82 |
+
core.load_checkpoint(self.path, **changed)
|
| 83 |
+
|
| 84 |
+
def test_wrong_epoch_rejected(self):
|
| 85 |
+
with self.assertRaisesRegex(ValueError, "epoch differs"):
|
| 86 |
+
core.load_checkpoint(self.path, **{**self.kw, "expected_epoch": 1})
|
| 87 |
+
|
| 88 |
+
def test_wrong_config_rejected(self):
|
| 89 |
+
with self.assertRaisesRegex(ValueError, "config differs"):
|
| 90 |
+
core.load_checkpoint(self.path, **{**self.kw, "expected_config": {"n_embd": 32}})
|
| 91 |
+
|
| 92 |
+
def test_json_config_label_keys_roundtrip(self):
|
| 93 |
+
public_config = json.loads(json.dumps(self.payload["config"]))
|
| 94 |
+
digest = api.canonical_sha(public_config)
|
| 95 |
+
expected = api.config_for_core(public_config)
|
| 96 |
+
model, payload = core.load_checkpoint(self.path, **{**self.kw, "expected_config": expected})
|
| 97 |
+
self.assertEqual(api.original_config_sha_after_load(payload["config"]), digest)
|
| 98 |
+
self.assertEqual(api.canonical_sha(public_config), digest)
|
| 99 |
+
|
| 100 |
+
def test_unexpected_config_runtime_value_rejected(self):
|
| 101 |
+
changed = {**self.payload["config"], "attn_implementation": "eager"}
|
| 102 |
+
with self.assertRaisesRegex(ValueError, "injected attention"):
|
| 103 |
+
api.original_config_sha_after_load(changed)
|
| 104 |
+
|
| 105 |
+
def test_nonfinite_rejected(self):
|
| 106 |
+
self.payload["state_dict"]["score.weight"][0, 0] = float("nan")
|
| 107 |
+
self.save()
|
| 108 |
+
with self.assertRaisesRegex(ValueError, "nonfinite"):
|
| 109 |
+
core.load_checkpoint(self.path, **self.kw)
|
| 110 |
+
|
| 111 |
+
def test_path_escape_and_ambiguity_rejected(self):
|
| 112 |
+
for relative in ("../secret", "/tmp/file", "a/../b", "a//b", "./a", "a\\b"):
|
| 113 |
+
with self.assertRaises(ValueError):
|
| 114 |
+
api.safe_path(self.root, relative)
|
| 115 |
+
|
| 116 |
+
def test_catalog_file_tamper(self):
|
| 117 |
+
path = HERE / "model_catalog.json"
|
| 118 |
+
original = path.read_bytes()
|
| 119 |
+
bad = self.root / "catalog.json"
|
| 120 |
+
bad.write_bytes(original + b" ")
|
| 121 |
+
with self.assertRaisesRegex(ValueError, "Catalog SHA"):
|
| 122 |
+
api.read_catalog(bad, api.file_sha(path))
|
| 123 |
+
|
| 124 |
+
def test_wrong_parent_rejected_with_rehashed_catalog(self):
|
| 125 |
+
data = json.loads((HERE / "model_catalog.json").read_text())
|
| 126 |
+
entry = next(x for x in data["models"] if x["kind"] == "source_classifier")
|
| 127 |
+
entry["pretraining_parent"]["id"] = "ES-pt0"
|
| 128 |
+
path = self.root / "catalog.json"
|
| 129 |
+
path.write_text(json.dumps(data))
|
| 130 |
+
with self.assertRaisesRegex(ValueError, "parent provenance"):
|
| 131 |
+
api.read_catalog(path, api.file_sha(path))
|
| 132 |
+
|
| 133 |
+
def test_tokenizer_hash_tamper(self):
|
| 134 |
+
catalog = json.loads((HERE / "model_catalog.json").read_text())
|
| 135 |
+
raw = (HERE / "tokenizer.json").read_bytes()
|
| 136 |
+
(self.root / "tokenizer.json").write_bytes(raw.replace(b"BPE", b"XYZ", 1))
|
| 137 |
+
with self.assertRaisesRegex(ValueError, "SHA"):
|
| 138 |
+
api.load_tokenizer(catalog, self.root)
|
| 139 |
+
|
| 140 |
+
def test_encoding_caps_and_roundtrip(self):
|
| 141 |
+
catalog = json.loads((HERE / "model_catalog.json").read_text())
|
| 142 |
+
tokenizer = api.load_tokenizer(catalog, HERE)
|
| 143 |
+
pair = {"sentence1": "hello world " * 400, "sentence2": "protein " * 400}
|
| 144 |
+
arrays, info = api.encode_pairs(tokenizer, [pair])
|
| 145 |
+
a = tokenizer.encode(pair["sentence1"], add_special_tokens=False).ids[:255]
|
| 146 |
+
b = tokenizer.encode(pair["sentence2"], add_special_tokens=False).ids[:255]
|
| 147 |
+
self.assertEqual(arrays["input_ids"][0].tolist(), a + [2] + b + [1])
|
| 148 |
+
self.assertTrue(arrays["attention_mask"].all())
|
| 149 |
+
self.assertEqual(info[0]["truncated_endpoints"], [True, True])
|
| 150 |
+
|
| 151 |
+
def test_labels_or_empty_endpoints_rejected(self):
|
| 152 |
+
tokenizer = api.load_tokenizer(json.loads((HERE / "model_catalog.json").read_text()), HERE)
|
| 153 |
+
for pair in ({"sentence1": "a", "sentence2": "b", "label": 1}, {"sentence1": "", "sentence2": "b"}):
|
| 154 |
+
with self.assertRaises(ValueError):
|
| 155 |
+
api.encode_pairs(tokenizer, [pair])
|
| 156 |
+
|
| 157 |
+
|
| 158 |
+
if __name__ == "__main__":
|
| 159 |
+
unittest.main()
|
test_output.txt
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
test_catalog_file_tamper (test_inference.IntegrityTests.test_catalog_file_tamper) ... ok
|
| 2 |
+
test_corrupt_file_rejected (test_inference.IntegrityTests.test_corrupt_file_rejected) ... ok
|
| 3 |
+
test_encoding_caps_and_roundtrip (test_inference.IntegrityTests.test_encoding_caps_and_roundtrip) ... ok
|
| 4 |
+
test_intact_reloads (test_inference.IntegrityTests.test_intact_reloads) ... ok
|
| 5 |
+
test_json_config_label_keys_roundtrip (test_inference.IntegrityTests.test_json_config_label_keys_roundtrip) ... ok
|
| 6 |
+
test_labels_or_empty_endpoints_rejected (test_inference.IntegrityTests.test_labels_or_empty_endpoints_rejected) ... ok
|
| 7 |
+
test_missing_head_rejected_even_with_new_digest (test_inference.IntegrityTests.test_missing_head_rejected_even_with_new_digest) ... ok
|
| 8 |
+
test_nonfinite_rejected (test_inference.IntegrityTests.test_nonfinite_rejected) ... ok
|
| 9 |
+
test_path_escape_and_ambiguity_rejected (test_inference.IntegrityTests.test_path_escape_and_ambiguity_rejected) ... ok
|
| 10 |
+
test_provenance_rejected (test_inference.IntegrityTests.test_provenance_rejected) ... ok
|
| 11 |
+
test_tokenizer_hash_tamper (test_inference.IntegrityTests.test_tokenizer_hash_tamper) ... ok
|
| 12 |
+
test_unexpected_config_runtime_value_rejected (test_inference.IntegrityTests.test_unexpected_config_runtime_value_rejected) ... ok
|
| 13 |
+
test_wrong_config_rejected (test_inference.IntegrityTests.test_wrong_config_rejected) ... ok
|
| 14 |
+
test_wrong_epoch_rejected (test_inference.IntegrityTests.test_wrong_epoch_rejected) ... ok
|
| 15 |
+
test_wrong_head_shape_rejected_even_with_new_digest (test_inference.IntegrityTests.test_wrong_head_shape_rejected_even_with_new_digest) ... ok
|
| 16 |
+
test_wrong_job_rejected (test_inference.IntegrityTests.test_wrong_job_rejected) ... ok
|
| 17 |
+
test_wrong_parent_rejected_with_rehashed_catalog (test_inference.IntegrityTests.test_wrong_parent_rejected_with_rehashed_catalog) ... ok
|
| 18 |
+
|
| 19 |
+
----------------------------------------------------------------------
|
| 20 |
+
Ran 17 tests in 0.361s
|
| 21 |
+
|
| 22 |
+
OK
|