> ## Documentation Index
> Fetch the complete documentation index at: https://proto.evodesign.org/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ESM2 Protein Language Model

> ESM-2 masked protein language model for local sequence mutation/refinement

<div class="page-hero">
  <img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/generator/esm2/hero.png" alt="ESM2 Protein Language Model" />
</div>

<Note>
  **License:** ESM2 is open source and free for academic and commercial use under an MIT license. Please refer to [the license](https://github.com/facebookresearch/esm/blob/main/LICENSE) for full terms.
</Note>

<p class="entity-disclaimer">This generator is open source. Any third-party models, product names, or trademarks referenced are the property of their respective owners, and Proto is not affiliated with them.</p>

<hr class="entity-rule" />

<input type="radio" name="tab-generator-esm2" id="none-generator-esm2" class="tab-radio-input" />

<input type="radio" name="tab-generator-esm2" id="tools-generator-esm2" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-generator-esm2" id="source-generator-esm2" class="tab-radio-input" />

<input type="radio" name="tab-generator-esm2" id="cite-generator-esm2" class="tab-radio-input" />

<div class="tool-tab-bar"><span class="tool-tab-wrap"><label for="tools-generator-esm2" class="tool-tab tab-open badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label><label for="none-generator-esm2" class="tool-tab tab-close badge-tools"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="7" height="7" x="3" y="3" rx="1" /><rect width="7" height="7" x="14" y="3" rx="1" /><rect width="7" height="7" x="14" y="14" rx="1" /><rect width="7" height="7" x="3" y="14" rx="1" /></svg> Tools Used</label></span> <span class="tool-tab-wrap"><label for="source-generator-esm2" class="tool-tab tab-open badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</label><label for="none-generator-esm2" class="tool-tab tab-close badge-source"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</label></span> <span class="tool-tab-wrap"><label for="cite-generator-esm2" class="tool-tab tab-open badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label><label for="none-generator-esm2" class="tool-tab tab-close badge-cite"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Cite</label></span></div>

<a href="/docs/tools/masked-models/esm2" class="tab-panel tools-panel tools-panel-single" data-tab="tools-generator-esm2">
  <div class="tools-single-card">
    <img noZoom src="https://proto-bio.github.io/proto-assets/images/tool/esm2/social.png" alt="" loading="lazy" />
  </div>

  <span class="panel-goto-btn tools-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M5 12h14" /><path d="m12 5 7 7-7 7" /></svg> Go to Tool Page</span></span>
</a>

<a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/generator/esm2_generator.py#L164" target="_blank" class="tab-panel source-panel" data-tab="source-generator-esm2">
  <div class="source-info">
    <img noZoom src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-language<span class="source-subpath">/proto\_language/generator/esm2\_generator.py</span></span>
  </div>

  <span class="panel-goto-btn source-goto-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0C5.37 0 0 5.37 0 12c0 5.31 3.435 9.795 8.205 11.385.6.105.825-.255.825-.57 0-.285-.015-1.23-.015-2.235-3.015.555-3.795-.735-4.035-1.41-.135-.345-.72-1.41-1.23-1.695-.42-.225-1.02-.78-.015-.795.945-.015 1.62.87 1.845 1.23 1.08 1.815 2.805 1.305 3.495.99.105-.78.42-1.305.765-1.605-2.67-.3-5.46-1.335-5.46-5.925 0-1.305.465-2.385 1.23-3.225-.12-.3-.54-1.53.12-3.18 0 0 1.005-.315 3.3 1.23.96-.27 1.98-.405 3-.405s2.04.135 3 .405c2.295-1.56 3.3-1.23 3.3-1.23.66 1.65.24 2.88.12 3.18.765.84 1.23 1.905 1.23 3.225 0 4.605-2.805 5.625-5.475 5.925.435.375.81 1.095.81 2.22 0 1.605-.015 2.895-.015 3.3 0 .315.225.69.825.57A12.02 12.02 0 0024 12c0-6.63-5.37-12-12-12z" /></svg> View source</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-generator-esm2">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @article{lin2023esm2,
      title={Evolutionary-scale prediction of atomic-level protein structure with a language model},
      author={Lin, Zeming and Akin, Halil and Rao, Roshan and Hie, Brian and Zhu, Zhongkai and Lu, Wenting and Smetanin, Nikita and Verkuil, Robert and Kabeli, Ori and Shmueli, Yaniv and others},
      journal={Science},
      volume={379},
      number={6637},
      pages={1123--1130},
      year={2023},
      publisher={American Association for the Advancement of Science},
      doi={10.1126/science.ade2574}
    }
    ```
  </div>

  <span class="panel-goto-btn cite-copy-btn"><span><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M3 21c3 0 7-1 7-8V5c0-1.25-.756-2.017-2-2H4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2 1 0 1 0 1 1v1c0 1-1 2-2 2s-1 .008-1 1.031V20c0 1 0 1 1 1z" /><path d="M15 21c3 0 7-1 7-8V5c0-1.25-.757-2.017-2-2h-4c-1.25 0-2 .75-2 1.972V11c0 1.25.75 2 2 2h.75c0 2.25.25 4-2.75 4v3c0 1 0 1 1 1z" /></svg> Copy citation</span></span>
</div>

<div class="entity-contributors"><span class="entity-contributors-label">Generator contributors</span><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/dguo8412" target="_blank" rel="noopener" title="dguo8412: 4 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/46211285?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">dguo8412</span></a></span></div>
Protein sequence mutation/refinement generator using ESM2 language model.

This generator uses the ESM2 protein language model to refine existing
protein sequences through iterative mutation. It masks positions according
to the configured masking strategy and samples biologically plausible amino
acids at those positions.

The generator category is `"mutation"`, indicating it refines proposal
sequences through targeted mutations.

## API Reference

<div class="api-model-section api-model-static api-config-section">
  <div class="api-model-header"><span class="api-model-badge api-config-badge">Config</span><span class="api-model-name">ESM2GeneratorConfig</span><a href="https://github.com/evo-design/proto-language/blob/d3b7822f74ea64747cc751a3b2ab1aa6b799ac47/proto_language/generator/esm2_generator.py#L16" target="_blank" class="func-table-btn func-source-btn api-model-source"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6" /><polyline points="8 6 2 12 8 18" /></svg> Source</a></div>

  Configuration object for ESM2Generator.

  This class defines configuration parameters for the ESM2 generator, which uses
  a protein language model to refine existing protein sequences through iterative
  mutation of masked positions. In Proto Language, ESM2 is registered as a
  mutation-category generator that edits the supplied starting sequence; the
  segment must carry a sequence (directly or from a prior optimizer stage).

  <ParamField path="model_checkpoint" type="enum" default="esm2_t33_650M_UR50D">
    ESM-2 model variant to load (e.g. esm2\_t33\_650M\_UR50D).

    Options: `esm2_t6_8M_UR50D`, `esm2_t12_35M_UR50D`, `esm2_t30_150M_UR50D`, `esm2_t33_650M_UR50D`, `esm2_t36_3B_UR50D`, `esm2_t48_15B_UR50D`
  </ParamField>

  <ParamField path="masking_strategy" type="MaskingStrategy">
    Controls which positions to mask for sampling. Default: random 30%.
  </ParamField>

  <ParamField path="sampling_method" type="enum" default="single_pass">
    'single\_pass' fills all masks in one forward; 'iterative\_refinement' runs a MaskGIT-style loop.

    Options: `single_pass`, `iterative_refinement`
  </ParamField>

  <ParamField path="temperature" type="number" default="1.0">
    Sharpness of sampling. Below 1 sharpens toward the likely amino acid; above 1 increases diversity.
  </ParamField>

  <ParamField path="top_p" type="number" default="1.0">
    Nucleus sampling cumulative probability cutoff used in iterative refinement. 1.0 disables it.
  </ParamField>

  <ParamField path="num_steps" type="integer" default="20">
    Number of iterative-refinement rounds. Returns diminish above 20.
  </ParamField>

  <ParamField path="schedule" type="enum" default="cosine">
    Per-round unmask rate. 'cosine' commits more positions late; 'linear' commits the same each round.

    Options: `cosine`, `linear`
  </ParamField>

  <ParamField path="strategy" type="enum" default="random">
    How positions are picked each round. 'entropy' takes most-confident first; 'random' is uniform.

    Options: `random`, `entropy`
  </ParamField>

  <ParamField path="temperature_annealing" type="boolean" default="True">
    Anneal temperature toward 0 across rounds
  </ParamField>

  <ParamField path="device" type="string" default="cuda">
    GPU device to run ESM2 on (e.g. 'cuda' or 'cuda:0').
  </ParamField>

  <ParamField path="batch_size" type="integer" default="1">
    Number of sequences to process simultaneously on GPU
  </ParamField>
</div>

## Usage

```python python icon="python" theme={null}
>>> from proto_language.generator import ESM2Generator, ESM2GeneratorConfig
>>> from proto_language.core import Segment
>>> from proto_tools.transforms.masking import MaskingStrategy
>>> config = ESM2GeneratorConfig(
...     temperature=1.0,
...     masking_strategy=MaskingStrategy(num_mutations=5),
... )
>>> gen = ESM2Generator(config)
>>> segment = Segment(sequence="M" * 100, sequence_type="protein")
>>> gen.assign(segment)
>>> gen.sample()  # Re-samples 5 randomly masked positions
```

## Metadata

| Property                 | Value               |
| ------------------------ | ------------------- |
| Key                      | `esm2`              |
| Class                    | `ESM2Generator`     |
| Category                 | `mutation`          |
| Input Type               | `starting_sequence` |
| Uses GPU                 | `True`              |
| Supported Sequence Types | `protein`           |
| Allows Empty Start       | `False`             |
