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

# Async Serverless Endpoint maken

Als je nog geen Novita-account hebt, <Link href="https://novita.ai/user/register" target="_blank">meld je dan eerst aan</Link>. Zie voor meer informatie de <Link href="/docs/nl/guides/quickstart">Quickstart-handleiding</Link>.

Dit artikel gebruikt de ComfyUI-workerimage `novitalabs/comfyui-worker:v0.0.1` als voorbeeld om te laten zien hoe je een Async Serverless Endpoint maakt en aanroept.

## 1. Containerimage voorbereiden

Verpak je runtime-omgeving in een Docker-image en upload deze vooraf naar een imageregister. Zowel openbare als privé-imageregisters worden ondersteund. Privéregisters vereisen inloggegevens voor het ophalen van images.

* Je kunt je image uploaden naar Docker Hub. Het platform biedt momenteel een [image-warm-upservice](https://novita.ai/gpus-console/image) voor Docker Hub-images.

Dit voorbeeld gebruikt `novitalabs/comfyui-worker:v0.0.1`. De image bevat ComfyUI en de Novita worker SDK. De taakinvoer is een ComfyUI-workflow-JSON en de worker-handler retourneert gegenereerde afbeeldingsresultaten. We raden aan om objectopslagomgevingsvariabelen te configureren, zoals `BUCKET_ENDPOINT_URL`, zodat gegenereerde afbeeldingen en video's naar je bucket kunnen worden geüpload en als URL's in de taakuitvoer kunnen worden geretourneerd.

## 2. Instancespecificatie selecteren

Async Serverless Endpoint ondersteunt momenteel de volgende GPU-instancetypen:

* RTX 4090 24GB
* H100 SXM 80GB

Voor dit `comfyui-worker`-voorbeeld raden we **RTX 4090 24GB** aan.

Neem voor aanvullende vereisten [contact met ons op](mailto:support@novita.ai).

## 3. Cloudopslag maken (optioneel)

Als je gedeelde of persistente opslag nodig hebt, maak dan cloudopslag aan op de [pagina voor opslagbeheer](https://novita.ai/gpus-console/storage) en koppel vervolgens de opslag bij het maken van het endpoint. Zie voor meer informatie [Cloudopslag beheren](https://novita.ai/docs/guides/gpu-instance-quickstart-manage-network-volume).

## 4. Endpoint maken

1. Ga naar de pagina [Async Serverless GPUs](https://novita.ai/gpus-console/serverless), selecteer een instancetype en klik op "Endpoint maken".
2. Voltooi de parameterconfiguratie van het endpoint.

* **Endpointnaam**: Wordt gebruikt om het endpoint uniek te identificeren. Dit is onderdeel van de URL bij het maken van taken. Het systeem genereert een willekeurige standaardnaam. Je kunt deze aanpassen, maar het wordt aanbevolen de standaardnaam te gebruiken.
* **Workerconfiguratie**

<table class="table table-big">
  <thead>
    <tr>
      <th>Configuratie-item</th>
      <th>Beschrijving</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td>Min. aantal workers</td>
      <td>Het minimale aantal workerinstances dat voor het endpoint behouden blijft. Een hoger minimum instellen helpt de cold-starttijd te verminderen. Als dit is ingesteld op 0, zijn er geen inactieve workers wanneer er geen verzoeken zijn, wat de responstijd voor nieuwe verzoeken kan verhogen. Gebruik 0 met voorzichtigheid voor latency-gevoelige scenario's.</td>
    </tr>

    <tr>
      <td>Max. aantal workers</td>
      <td>Het maximale aantal workerinstances waarnaar het endpoint kan opschalen. Wanneer het verzoekvolume toeneemt, verhoogt het platform automatisch het aantal workers tot dit maximum. Deze limiet helpt kosten te beheersen.</td>
    </tr>

    <tr>
      <td>Inactiviteitstime-out (seconden)</td>
      <td>Wanneer een worker op het punt staat te worden vrijgegeven vanwege schaalverkleining, behoudt het platform deze gedurende de geconfigureerde inactiviteitstime-out, zodat deze snel op nieuwe verzoeken kan reageren. Gedurende deze periode worden er kosten voor de worker in rekening gebracht.</td>
    </tr>

    <tr>
      <td>Max. gelijktijdige verzoeken</td>
      <td>Het maximale aantal gelijktijdige verzoeken dat door één worker wordt verwerkt. Als dit wordt overschreden, worden verzoeken naar andere workers gerouteerd. Als alle workers volledig bezet zijn, worden overtollige verzoeken in de wachtrij geplaatst totdat uitvoering mogelijk is.</td>
    </tr>

    <tr>
      <td>GPU's / worker</td>
      <td>Aantal GPU-kaarten dat aan elke worker wordt toegewezen.</td>
    </tr>

    <tr>
      <td>CUDA-versie</td>
      <td>CUDA-versie die door de worker wordt gebruikt.</td>
    </tr>
  </tbody>
</table>

Selecteer voor dit voorbeeld **RTX 4090 24GB** en stel `GPUs / Worker` in op `1`.

* **Type**:
  * Selecteer **Async**.
* **Elastisch beleid**:
  * Selecteer **Wachtrijverzoekbeleid**.
  * Stel **Doelconcurrency voor één worker** in op `1`. De ComfyUI-worker in dit voorbeeld verwerkt één taak tegelijk. Wanneer verzoeken in de wachtrij de huidige workercapaciteit overschrijden, schaalt het platform workers op basis van het aantal verzoeken in de wachtrij totdat het maximale aantal workers is bereikt.
* **Imageconfiguratie**:
  * Imageadres: `novitalabs/comfyui-worker:v0.0.1`.
  * Imagerepository-inloggegevens: Als de image privé is, geef dan inloggegevens voor het ophalen van de image op. Je kunt inloggegevens maken op de [pagina voor beheer van beveiligingsinloggegevens](https://novita.ai/gpu-instance/console/settings).
  * HTTP-poort: HTTP-poort van de worker.
  * Startopdracht voor container: Opdracht die wordt uitgevoerd wanneer de container start.
* **Opslagconfiguratie**:
  * Systeemschijf: Grootte van de systeemschijf per workerinstance.
  * Cloudopslag: Selecteer cloudopslag als je deze moet koppelen. Zie voor meer informatie [Cloudopslag beheren](https://novita.ai/docs/guides/gpu-instance-quickstart-manage-network-volume).
* **Overig**:
  * Healthcheckpad: Deze parameter is momenteel niet ingeschakeld.
  * Omgevingsvariabelen: Stel de omgevingsvariabelen in die door de service vereist zijn. Voorbeeld van S3-configuratie:

```bash theme={"system"}
BUCKET_ENDPOINT_URL=https://s3.<aws-region>.amazonaws.com
BUCKET_ACCESS_KEY_ID=<your-access-key-id>
BUCKET_SECRET_ACCESS_KEY=<your-secret-access-key>
BUCKET_NAME=<your-bucket-name>
```

Wanneer je `comfyui-worker` gebruikt, raden we sterk aan objectopslag te configureren, zodat uitvoerafbeeldingen naar een bucket worden geüpload en als URL's worden geretourneerd.

3. Controleer de prijsstelling en klik op "Met één klik implementeren".

## 5. Toegang tot de service

1. Zoek op de pagina [Async Serverless GPUs](https://novita.ai/gpus-console/serverless) het zojuist gemaakte endpoint en controleer of de status "Actief" is.
2. Zorg ervoor dat ten minste één worker in het endpoint actief is.
3. Zorg ervoor dat je een API-sleutel voor authenticatie hebt. De maker van het endpoint en de eigenaar van de API-sleutel moeten tot hetzelfde team behoren.

Je hebt de volgende informatie nodig om een Async Serverless Endpoint aan te roepen:

| Parameter          | Beschrijving                                                                                                                                   |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| Openbare basis-URL | `https://async-public.serverless.novita.ai/v1`                                                                                                 |
| Endpointnaam       | De naam die wordt gegenereerd na het maken van het endpoint, bijvoorbeeld `0f43a6867e05fddd`. Deze naam is onderdeel van de taak-URL.          |
| API-sleutel        | Maak of kopieer een API-sleutel vanaf de pagina API Key / Sleutelbeheer. Geef deze door in de requestheader `Authorization: Bearer <API_KEY>`. |

Een API-sleutel verkrijgen:

1. Log in op de Novita-console.
2. Ga naar de pagina API Key / Sleutelbeheer.
3. Maak een API-sleutel en kopieer de gegenereerde waarde `sk_...`.
4. Zorg ervoor dat de eigenaar van de API-sleutel en de eigenaar van het endpoint in hetzelfde team zitten.

### 5.1 Een taak maken en uitvoer ophalen via Curl

Het volgende verzoek is een uitvoerbaar `comfyui-worker`-voorbeeld en komt overeen met de geteste case. Vervang `0f43a6867e05fddd` in de URL door je echte endpointnaam en vervang `sk_xxxx` door je echte API-sleutel.

<Note>
  De maximale taakgrootte die door Async Serverless Endpoint wordt geaccepteerd, is 4 MiB.
</Note>

```bash theme={"system"}
curl -X POST https://async-public.serverless.novita.ai/v1/0f43a6867e05fddd/run \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer sk_xxxx' \
  -d '{
    "input": {
      "workflow": {
        "4": {
          "class_type": "CheckpointLoaderSimple",
          "inputs": {
            "ckpt_name": "flux1-dev-fp8.safetensors"
          }
        },
        "5": {
          "class_type": "EmptyLatentImage",
          "inputs": {
            "width": 512,
            "height": 512,
            "batch_size": 1
          }
        },
        "6": {
          "class_type": "CLIPTextEncode",
          "inputs": {
            "clip": ["4", 1],
            "text": "a red apple on a table"
          }
        },
        "7": {
          "class_type": "CLIPTextEncode",
          "inputs": {
            "clip": ["4", 1],
            "text": "blurry, low quality"
          }
        },
        "3": {
          "class_type": "KSampler",
          "inputs": {
            "model": ["4", 0],
            "positive": ["6", 0],
            "negative": ["7", 0],
            "latent_image": ["5", 0],
            "seed": 42,
            "steps": 10,
            "cfg": 7,
            "sampler_name": "euler",
            "scheduler": "normal",
            "denoise": 1
          }
        },
        "8": {
          "class_type": "VAEDecode",
          "inputs": {
            "samples": ["3", 0],
            "vae": ["4", 2]
          }
        },
        "9": {
          "class_type": "SaveImage",
          "inputs": {
            "filename_prefix": "test",
            "images": ["8", 0]
          }
        }
      },
      "output_node_id": "9"
    }
}'
```

Responsvoorbeeld, waarbij `id` de `job_id` is:

```json theme={"system"}
{"id":"8cb6a77c-62aa-4eb4-9226-1ca5724fd9dd","status":"PENDING"}
```

**Taakstatus controleren en resultaten ophalen**

<Note>
  De maximale uitvoergrootte die wordt geretourneerd door de Async Serverless Endpoint `status` API is 4 MiB. Configureer objectopslagomgevingsvariabelen en retourneer geüploade bestands-URL's in de uitvoer om deze beperking te vermijden.

  Taakresultaten worden tot 6 uur na voltooiing bewaard in het Async Serverless Endpoint.
</Note>

```bash theme={"system"}
curl -X GET https://async-public.serverless.novita.ai/v1/0f43a6867e05fddd/status/33a0bc4b-7312-41f6-ad15-eb9016bd68f9 \
  -H 'Authorization: Bearer sk_xxxx'
```

**Taak annuleren**

```bash theme={"system"}
curl -X POST https://async-public.serverless.novita.ai/v1/0f43a6867e05fddd/cancel/e5f3c3c0-c3b1-49c2-9452-bb96eaa34ce6 \
  -H 'Authorization: Bearer sk_xxxx'
```

**Status van de endpointtaakwachtrij controleren**

```bash theme={"system"}
curl -X GET https://async-public.serverless.novita.ai/v1/0f43a6867e05fddd/health \
  -H 'Authorization: Bearer sk_xxxx'
```

Responsvoorbeeld:

```json theme={"system"}
{
  "workers": {
    "idle": 0,
    "running": 0,
    "throttled": 0,
    "total": 0
  },
  "jobs": {
    "completed": 0,
    "failed": 0,
    "inProgress": 0,
    "inQueue": 0,
    "retried": 0
  }
}
```

### 5.2 Taak maken en resultaten ophalen via Novita SDK

Installeer de SDK:

```bash theme={"system"}
pip install novita-gpus
```

```python theme={"system"}
import novita_gpus

novita_gpus.api_key = "sk_xxxx"

input_payload = {
    "workflow": {
        "4": {
            "class_type": "CheckpointLoaderSimple",
            "inputs": {"ckpt_name": "flux1-dev-fp8.safetensors"},
        },
        "5": {
            "class_type": "EmptyLatentImage",
            "inputs": {"width": 512, "height": 512, "batch_size": 1},
        },
        "6": {
            "class_type": "CLIPTextEncode",
            "inputs": {"clip": ["4", 1], "text": "a red apple on a table"},
        },
        "7": {
            "class_type": "CLIPTextEncode",
            "inputs": {"clip": ["4", 1], "text": "blurry, low quality"},
        },
        "3": {
            "class_type": "KSampler",
            "inputs": {
                "model": ["4", 0],
                "positive": ["6", 0],
                "negative": ["7", 0],
                "latent_image": ["5", 0],
                "seed": 42,
                "steps": 10,
                "cfg": 7,
                "sampler_name": "euler",
                "scheduler": "normal",
                "denoise": 1,
            },
        },
        "8": {
            "class_type": "VAEDecode",
            "inputs": {"samples": ["3", 0], "vae": ["4", 2]},
        },
        "9": {
            "class_type": "SaveImage",
            "inputs": {"filename_prefix": "test", "images": ["8", 0]},
        },
    },
    "output_node_id": "9",
}

endpoint = novita_gpus.Endpoint("0f43a6867e05fddd")
job = endpoint.run(input_payload)

print(job.status())
output = job.output(timeout=300)
print(output)
```

De standaard request-URL van de `novita-gpus` SDK is `https://async-public.serverless.novita.ai/v1`.

## 6. Async Serverless Endpoint beheren

Zie [Serverless Endpoint beheren](https://novita.ai/docs/guides/serverless-gpus-quickstart-manage-endpoint).
