Creazione e uso di una sandbox
Creare una sandbox in un progetto di intelligenza artificiale generativa attivo, eseguire un comando e interrompere il runtime al termine.
Utilizzare l'interfaccia CLI o l'SDK OCI per creare sandbox. La console fornisce la configurazione del progetto, i dettagli della sandbox, il monitoraggio e le azioni del ciclo di vita.
Informazioni preliminari
- Configurare le autorizzazioni in Autorizzazioni a livello di API per sandbox.
- Selezionare un'area supportata.
- Installare una versione CLI o SDK OCI che includa il gruppo di comandi
generative-ai-sandboxo il pacchettooci.generative_ai_sandbox. Vedere OCI CLI e SDK for Python.
Gli esempi utilizzano una shell che supporta la sintassi della variabile mostrata e l'autenticazione della sessione OCI. Eseguire oci session authenticate, quindi impostare profile_name sul profilo creato. Vedere Token-based Authentication for the CLI.
Per verificare che l'interfaccia CLI includa i comandi, eseguire le operazioni riportate di seguito.
oci generative-ai-sandbox --helpUso dell'interfaccia CLI
Sostituire COMPARTMENT_OCID e PROJECT_OCID con gli identificativi delle risorse esistenti.
Utilizzo dell'SDK Python
In questo esempio viene utilizzato un progetto attivo esistente con sandbox abilitate e il profilo di autenticazione della sessione preparato in precedenza. Crea una sandbox, la attende, esegue un comando e richiede un arresto al termine.
from pathlib import Path
import time
import warnings
import oci
from oci.generative_ai_sandbox import GenerativeAiSandboxClient
from oci.generative_ai_sandbox.models import (
CreateSandboxDetails,
RunSandboxCommandDetails,
StopSandboxDetails,
)
profile_name = "DEFAULT"
project_id = "PROJECT_OCID"
region = "us-chicago-1"
config = oci.config.from_file(profile_name=profile_name)
key = oci.signer.load_private_key_from_file(config["key_file"])
token = Path(config["security_token_file"]).expanduser().read_text().strip()
signer = oci.auth.signers.SecurityTokenSigner(token, key)
client = GenerativeAiSandboxClient(
config=config,
signer=signer,
service_endpoint=f"https://inference.generativeai.{region}.oci.oraclecloud.com",
)
created = client.create_sandbox(
project_id,
CreateSandboxDetails(
display_name="my-sandbox",
runtime="python-3.11",
shape="SMALL",
expiration_duration="PT30M",
),
).data
sandbox_id = created.id
print(sandbox_id)
state = created.lifecycle_state
try:
# This example waits up to five minutes for creation.
deadline = time.monotonic() + 300
while time.monotonic() < deadline:
sandbox = client.get_sandbox(sandbox_id).data
state = sandbox.lifecycle_state
if state == "RUNNING":
break
if state in {"FAILED", "STOPPING", "STOPPED", "DELETING", "DELETED"}:
raise RuntimeError(f"Sandbox state: {sandbox.lifecycle_state}")
time.sleep(2)
else:
raise TimeoutError("Sandbox didn't reach RUNNING within five minutes")
result = client.run_sandbox_command_and_wait(
sandbox_id,
RunSandboxCommandDetails(command="python3 --version", timeout="PT1M"),
).data
print(result.output.stdout)
print(result.output.stderr)
print(result.output.exit_code)
finally:
# Attempt cleanup without masking an earlier error.
if state not in {"FAILED", "STOPPING", "STOPPED", "DELETING", "DELETED"}:
try:
client.stop_sandbox(sandbox_id, StopSandboxDetails(is_force=False))
except Exception as cleanup_error:
warnings.warn(f"Check sandbox {sandbox_id}: stop failed: {cleanup_error}")