> This page is for version 0.5.0 · 26.06.
> For other versions, use one of these documentation indexes:
> - Nightly (default): https://docs.nvidia.com/nemo/automodel/nightly/llms.txt
> - Latest: https://docs.nvidia.com/nemo/automodel/latest/llms.txt
> - 0.5.0 · 26.06: https://docs.nvidia.com/nemo/automodel/v0.5/llms.txt
> - 0.4.0 · 26.04: https://docs.nvidia.com/nemo/automodel/v0.4/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.nvidia.com/nemo/automodel/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.nvidia.com/nemo/automodel/_mcp/server.

# nemo_automodel.components.speculative.eagle.remote

Train-inference disaggregation for EAGLE-3 target serving.

Runs the frozen target model as a standalone inference server on separate
GPU(s) while the draft model trains elsewhere. The training side talks to the
server through `RemoteEagle3TargetModel`, which implements the
`Eagle3TargetBackend`
contract, so the EAGLE-3 recipe consumes a remote target exactly like the
co-located `HFEagle3TargetModel`.

* HTTP is the control plane (input\_ids up, tensor metadata down).
* NCCL is the data plane for the large supervision tensors (GPU-to-GPU,
  NVLink intra-node / RDMA inter-node), with a compact binary wire format
  fallback when NCCL is unavailable.

## Submodules

* **[`nemo_automodel.components.speculative.eagle.remote.client`](/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/client)**
* **[`nemo_automodel.components.speculative.eagle.remote.protocol`](/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/protocol)**
* **[`nemo_automodel.components.speculative.eagle.remote.server`](/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/server)**
* **[`nemo_automodel.components.speculative.eagle.remote.transport`](/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/transport)**
* **[`nemo_automodel.components.speculative.eagle.remote.wire`](/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/wire)**

## Package Contents

### Classes

| Name                                                                                                            | Description                                                             |
| --------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [`RemoteEagle3TargetModel`](#nemo_automodel-components-speculative-eagle-remote-client-RemoteEagle3TargetModel) | EAGLE-3 target backend that delegates forward passes to remote servers. |

### API

```python
class nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel(
    urls: list[str],
    device: torch.device,
    timeout: int = 120,
    max_retries: int = 3
)
```

**Bases:** [Eagle3TargetBackend](/nemo-automodel/nemo_automodel/components/speculative/eagle/backend#nemo_automodel-components-speculative-eagle-backend-Eagle3TargetBackend)

EAGLE-3 target backend that delegates forward passes to remote servers.

**`_clients`**

---

**`_embeddings`** `SimpleNamespace | None = None`

---

**`_executor`** `ThreadPoolExecutor | None = None`

---

**`_next`** `= itertools.cycle(range(len(self._clients)))`

---

**`num_remote_servers`** `int`

---

**`supports_async`** `bool`

---

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel._build_payload(
    input_ids,
    attention_mask,
    loss_mask
) -> bytes
```

staticmethod

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel._to_batch(
    result: dict,
    attention_mask: torch.Tensor
) -> nemo_automodel.components.speculative.eagle.target.Eagle3TargetBatch
```

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel.close() -> None
```

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel.from_urls(
    urls: list[str],
    device,
    kwargs = {}
) -> 'RemoteEagle3TargetModel'
```

classmethod

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel.generate_batch(
    input_ids,
    attention_mask,
    loss_mask
) -> nemo_automodel.components.speculative.eagle.target.Eagle3TargetBatch
```

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel.generate_batch_async(
    input_ids,
    attention_mask,
    loss_mask
) -> nemo_automodel.components.speculative.eagle.remote.client._AsyncHandle
```

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel.get_input_embeddings()
```

Fetch the target input-embedding weight once and cache it.

Returns an object exposing `.weight` (the only attribute the draft's
`copy_embeddings_from_target` reads), matching the offline-cache path.

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel.model_info() -> dict
```

```python
nemo_automodel.components.speculative.eagle.remote.client.RemoteEagle3TargetModel.set_vocab_mapping(
    selected_token_ids: torch.Tensor,
    selected_token_mask: torch.Tensor
) -> None
```