Instructions to use Synthyra/ESMFold2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Synthyra/ESMFold2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="Synthyra/ESMFold2", trust_remote_code=True)# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("Synthyra/ESMFold2", trust_remote_code=True) model = AutoModel.from_pretrained("Synthyra/ESMFold2", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
Download fastplms/attention/_kernel_lock.py from Synthyra/ESMFold2: direct link, hf CLI and curl.
- Browser
- Download file 12.4 kB
-
https://huggingface.co/Synthyra/ESMFold2/resolve/main/fastplms/attention/_kernel_lock.py
- Command line
-
hf download hf://Synthyra/ESMFold2/fastplms/attention/_kernel_lock.py
-
curl -L -o _kernel_lock.py https://huggingface.co/Synthyra/ESMFold2/resolve/main/fastplms/attention/_kernel_lock.py
12.4 kB
| """Resolve and validate Hugging Face kernels before importing their binaries.""" | |
| from __future__ import annotations | |
| import hashlib | |
| import json | |
| import os | |
| import re | |
| from pathlib import Path | |
| from typing import Any | |
| # kernels.lock records, per locked build variant, one SHA-256 over the variant's relative | |
| # file paths and the Git or Git LFS object IDs of their contents. kernels 0.17 no longer | |
| # writes or checks these digests, so this module checks them before anything is imported. | |
| _VARIANT_HASH_TYPE = "git_lfs_concat" | |
| _VARIANT_DIGEST = re.compile(r"sha256-[0-9a-f]{64}") | |
| # The Hub cache names a Git blob by its 40-character SHA-1 object ID and Git LFS content | |
| # by its 64-character SHA-256. | |
| _GIT_OBJECT_ID_LENGTH = 40 | |
| _LFS_OBJECT_ID_LENGTH = 64 | |
| def require_kernels_package() -> None: | |
| """Fail early when the precompiled-kernel runtime is not installed.""" | |
| try: | |
| import kernels # noqa: F401 | |
| except ImportError as error: | |
| raise RuntimeError( | |
| "Precompiled FlashAttention requires requirements/features/flash.in." | |
| ) from error | |
| def _kernel_lock_path() -> Path: | |
| """Return the kernel lock from a Hub artifact or source checkout.""" | |
| source_path = Path(__file__).resolve() | |
| for candidate in ( | |
| source_path.parents[1] / "kernels.lock", | |
| source_path.parents[3] / "kernels.lock", | |
| ): | |
| if candidate.is_file(): | |
| return candidate | |
| raise RuntimeError( | |
| "kernels.lock is missing from the Hugging Face artifact or source checkout." | |
| ) | |
| def _locked_entry(lock_path: Path, repository: str) -> dict[str, Any]: | |
| try: | |
| lock_entries = json.loads(lock_path.read_text(encoding="utf-8")) | |
| except (OSError, json.JSONDecodeError) as error: | |
| raise RuntimeError(f"Unable to read the kernel lock: {lock_path}") from error | |
| if not isinstance(lock_entries, list): | |
| raise RuntimeError("kernels.lock must contain a JSON list.") | |
| if any(not isinstance(entry, dict) for entry in lock_entries): | |
| raise RuntimeError("Every kernels.lock entry must be a JSON object.") | |
| matches = [entry for entry in lock_entries if entry.get("repo_id") == repository] | |
| if len(matches) != 1: | |
| raise RuntimeError( | |
| f"kernels.lock must contain exactly one entry for {repository!r}; found {len(matches)}." | |
| ) | |
| return matches[0] | |
| def _locked_variant_digests(entry: dict[str, Any]) -> dict[str, str]: | |
| """Each locked build variant of one kernels.lock entry, mapped to its digest.""" | |
| variants = entry.get("variants") | |
| if not isinstance(variants, dict) or not variants: | |
| raise RuntimeError(f"kernels.lock locks no build variants for {entry.get('repo_id')!r}.") | |
| digests: dict[str, str] = {} | |
| for variant_name, variant_lock in variants.items(): | |
| expected_hash = variant_lock.get("hash") if isinstance(variant_lock, dict) else None | |
| if ( | |
| not isinstance(expected_hash, str) | |
| or _VARIANT_DIGEST.fullmatch(expected_hash) is None | |
| or variant_lock.get("hash_type") != _VARIANT_HASH_TYPE | |
| ): | |
| raise RuntimeError(f"The kernel lock for {variant_name} has no valid SHA-256 digest.") | |
| digests[variant_name] = expected_hash | |
| return digests | |
| def _git_blob_object_id(contents: bytes) -> bytes: | |
| """Return the SHA-1 object ID Git assigns to a blob with these contents.""" | |
| return hashlib.sha1(b"blob %d\0" % len(contents) + contents).digest() | |
| def validate_variant_digest(snapshot: Path, variant_name: str, expected_hash: str) -> None: | |
| """Check one cached build variant against its kernels.lock digest before import. | |
| Snapshot files link into the Hub cache's content-addressed blobs. Each linked file | |
| contributes its path relative to the variant, then the object ID its contents hash to: | |
| a Git blob ID when the cache names the blob by SHA-1, a Git LFS SHA-256 otherwise. | |
| Files that are not links are skipped, because importing a kernel writes bytecode | |
| beside it. | |
| """ | |
| variant_root = snapshot / "build" / variant_name | |
| linked_files: list[tuple[bytes, Path]] = [] | |
| for directory, _, file_names in os.walk(variant_root): | |
| for file_name in file_names: | |
| path = Path(directory) / file_name | |
| if path.is_symlink(): | |
| relative_name = path.relative_to(variant_root).as_posix().encode("utf-8") | |
| linked_files.append((relative_name, path)) | |
| digest = hashlib.sha256() | |
| for relative_name, path in sorted(linked_files): | |
| contents = path.read_bytes() | |
| object_id_length = len(path.resolve().name) | |
| if object_id_length == _GIT_OBJECT_ID_LENGTH: | |
| object_id = _git_blob_object_id(contents) | |
| elif object_id_length == _LFS_OBJECT_ID_LENGTH: | |
| object_id = hashlib.sha256(contents).digest() | |
| else: | |
| raise RuntimeError(f"Unexpected Hub cache blob name behind {path}.") | |
| digest.update(relative_name) | |
| digest.update(object_id) | |
| received_hash = f"sha256-{digest.hexdigest()}" | |
| if received_hash != expected_hash: | |
| raise RuntimeError( | |
| f"The cached kernel variant {variant_name} hashes to {received_hash}, but " | |
| f"kernels.lock records {expected_hash}." | |
| ) | |
| def _offline_mode() -> bool: | |
| """Return whether Hub access was explicitly disabled for this process.""" | |
| enabled_values = {"1", "on", "true", "yes"} | |
| return any( | |
| os.environ.get(name, "").strip().lower() in enabled_values | |
| for name in ("HF_HUB_OFFLINE", "TRANSFORMERS_OFFLINE") | |
| ) | |
| def _offline_snapshot_path(repository: str, revision: str) -> Path: | |
| """Locate one exact, possibly sparse, kernel snapshot without using Hub APIs.""" | |
| try: | |
| from huggingface_hub import constants | |
| from huggingface_hub.file_download import repo_folder_name | |
| except ImportError as error: | |
| raise RuntimeError("Offline kernel loading requires huggingface-hub.") from error | |
| cache_root = Path(os.environ.get("KERNELS_CACHE") or constants.HF_HUB_CACHE).resolve() | |
| repository_root = ( | |
| cache_root / repo_folder_name(repo_id=repository, repo_type="kernel") | |
| ).resolve() | |
| snapshot = repository_root / "snapshots" / revision | |
| if not snapshot.is_dir(): | |
| raise RuntimeError( | |
| f"The exact offline kernel snapshot {repository}@{revision} is not cached under " | |
| f"{cache_root}. Load the kernel once with Hub access before enabling offline mode." | |
| ) | |
| if repository_root not in snapshot.resolve().parents: | |
| raise RuntimeError(f"Refusing kernel snapshot outside its cache repository: {snapshot}") | |
| return snapshot | |
| def _load_offline_locked_kernel( | |
| repository: str, | |
| revision: str, | |
| variant_digests: dict[str, str], | |
| ) -> object: | |
| """Validate and import the one compatible variant from a sparse Hub snapshot.""" | |
| snapshot = _offline_snapshot_path(repository, revision) | |
| build_root = snapshot / "build" | |
| if not build_root.is_dir(): | |
| raise RuntimeError(f"The cached kernel snapshot has no build directory: {snapshot}") | |
| cached_names = sorted(entry.name for entry in build_root.iterdir() if entry.is_dir()) | |
| unexpected = sorted(set(cached_names).difference(variant_digests)) | |
| if unexpected: | |
| raise RuntimeError( | |
| f"The cached {repository}@{revision} snapshot contains unlocked variants: " | |
| f"{', '.join(unexpected)}" | |
| ) | |
| try: | |
| from kernels import get_local_kernel | |
| from kernels.variants import get_variants_local, resolve_variants | |
| except ImportError as error: | |
| raise RuntimeError( | |
| "Precompiled FlashAttention requires requirements/features/flash.in." | |
| ) from error | |
| cached_variants = get_variants_local(build_root) | |
| parsed_names = {variant.variant_str for variant in cached_variants} | |
| invalid = sorted(set(cached_names).difference(parsed_names)) | |
| if invalid: | |
| raise RuntimeError( | |
| f"The cached {repository}@{revision} snapshot contains invalid variants: " | |
| f"{', '.join(invalid)}" | |
| ) | |
| compatible, _ = resolve_variants(cached_variants) | |
| if len(compatible) != 1: | |
| names = ", ".join(variant.variant_str for variant in compatible) or "none" | |
| raise RuntimeError( | |
| f"Expected exactly one compatible cached variant for {repository}@{revision}; " | |
| f"found {names}." | |
| ) | |
| variant_name = compatible[0].variant_str | |
| # Hash validation deliberately happens before import. It reads the sparse snapshot | |
| # directly, so no Hub API judges whether the snapshot is complete. | |
| validate_variant_digest(snapshot, variant_name, variant_digests[variant_name]) | |
| return get_local_kernel(build_root / variant_name) | |
| def _compatible_locked_variants(repository: str, variant_names: list[str]) -> list[str]: | |
| """Return the locked build variants `kernels` can load on this system, preferred first.""" | |
| try: | |
| from kernels.variants import parse_variant, resolve_variants | |
| except ImportError as error: | |
| raise RuntimeError( | |
| "Precompiled FlashAttention requires requirements/features/flash.in." | |
| ) from error | |
| try: | |
| locked_variants = [parse_variant(variant_name) for variant_name in variant_names] | |
| except ValueError as error: | |
| raise RuntimeError(f"kernels.lock contains an invalid {repository} variant.") from error | |
| compatible, _ = resolve_variants(locked_variants) | |
| return [variant.variant_str for variant in compatible] | |
| def _preferred_locked_variant(repository: str, revision: str, variant_names: list[str]) -> str: | |
| """Return the locked build variant `kernels` prefers on this system.""" | |
| compatible = _compatible_locked_variants(repository, variant_names) | |
| if not compatible: | |
| raise RuntimeError( | |
| f"kernels.lock locks no build of {repository}@{revision} for this system; " | |
| f"locked variants: {', '.join(sorted(variant_names))}." | |
| ) | |
| return compatible[0] | |
| def _pinned_variant_digests(repository: str, revision: str) -> dict[str, str]: | |
| """Return the locked build digests of a kernel whose kernels.lock entry pins `revision`.""" | |
| entry = _locked_entry(_kernel_lock_path(), repository) | |
| locked_revision = entry.get("sha") | |
| if locked_revision != revision: | |
| raise RuntimeError( | |
| f"The typed manifest pins {repository}@{revision}, but kernels.lock pins " | |
| f"{locked_revision}." | |
| ) | |
| return _locked_variant_digests(entry) | |
| def locked_variant_for_this_system(repository: str, revision: str) -> str | None: | |
| """Return the locked build `kernels` would load here, or None when kernels.lock pins none. | |
| Only kernels.lock is read, so a caller can tell a platform the lock does not cover | |
| apart from a download, digest, or import failure. | |
| """ | |
| variant_digests = _pinned_variant_digests(repository, revision) | |
| compatible = _compatible_locked_variants(repository, list(variant_digests)) | |
| return compatible[0] if compatible else None | |
| def load_locked_kernel(repository: str, revision: str) -> object: | |
| """Download, hash-validate, then import one immutable precompiled kernel.""" | |
| require_kernels_package() | |
| try: | |
| from huggingface_hub import snapshot_download | |
| from kernels import get_local_kernel | |
| except ImportError as error: | |
| raise RuntimeError( | |
| "Precompiled FlashAttention requires requirements/features/flash.in." | |
| ) from error | |
| variant_digests = _pinned_variant_digests(repository, revision) | |
| if _offline_mode(): | |
| return _load_offline_locked_kernel(repository, revision, variant_digests) | |
| # Only a locked build can be selected, and only its files are downloaded, at the | |
| # immutable revision. The download imports nothing; the digest check runs first. | |
| variant_name = _preferred_locked_variant(repository, revision, list(variant_digests)) | |
| snapshot = Path( | |
| snapshot_download( | |
| repository, | |
| repo_type="kernel", | |
| revision=revision, | |
| allow_patterns=[f"build/{variant_name}/*"], | |
| cache_dir=os.environ.get("KERNELS_CACHE") or None, | |
| ) | |
| ) | |
| validate_variant_digest(snapshot, variant_name, variant_digests[variant_name]) | |
| return get_local_kernel(snapshot / "build" / variant_name) | |