> For clean Markdown of any page, append .md to the page URL. > For a complete documentation index, see https://docs.nvidia.com/nemo/automodel/v0.4/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/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 ``` ## Docs - [nemo_automodel.components.speculative.eagle.remote.client](https://docs.nvidia.com/nemo/automodel/v0.4/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/client.md) - [nemo_automodel.components.speculative.eagle.remote.protocol](https://docs.nvidia.com/nemo/automodel/v0.4/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/protocol.md) - [nemo_automodel.components.speculative.eagle.remote.server](https://docs.nvidia.com/nemo/automodel/v0.4/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/server.md) - [nemo_automodel.components.speculative.eagle.remote.transport](https://docs.nvidia.com/nemo/automodel/v0.4/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/transport.md) - [nemo_automodel.components.speculative.eagle.remote.wire](https://docs.nvidia.com/nemo/automodel/v0.4/nemo-automodel/nemo_automodel/components/speculative/eagle/remote/wire.md)