Export a spuštění trénovaného mozku
- Celková doba dokončení:15 minut
- Aktivní čas:10 minut
- Čas exportu:5 minut
Pomocí funkce export brain zabalte trénovaný mozek jako kontejnerizovanou službu, která může běžet kdekoli, kde je Docker nainstalovaný, včetně místního počítače.
Poznámka
Bonsai export podporuje následující architektury procesorů:
- x64:Systémy AMD a Intel na 64bitovém nebo 32bitovém hardwaru (systémy Linux pro obecné účely)
- arm64 (v8):64bitové systémy RISC (Raspberry Pi 3+, Linux, novější průmyslové systémy)
- arm32 (v7):32bitové systémy RISC (Raspberry Pi 1, Raspberry Pi 2, Linux, starší průmyslové systémy)
Než začnete
- Musíte mít nainstalované Rozhraní příkazového řádku Azure.
- Na místním počítači musíte mít nainstalovaný Docker. Komunitní edice Dockeru je dostupná pro Windows, Linuxa MacOS.
- Ke čtení a zápisu musíte mít Azure Container Registry (ACR). Bonsai poskytuje výchozí ACR při zřizování pracovního prostoru ve stejné skupině prostředků jako pracovní prostor.
- Musíte mít dokončený plně natrénovaný mozek.
Krok 1: Export mozku jako image Dockeru
- Přihlaste se k Bonsai UI .
- Vyberte mozek a verzi, se kterou chcete pracovat.
- Přejděte na panel Train (Trénovat).
- Klikněte na tlačítko Export brain (Exportovat mozek).
- V dialogovém okně, které se otevře:
- Zadejte název vyexportovaného mozku.
- Vyberte architekturu procesoru, na které bude mozek běžet.
Snímek obrazovky s panelem pro export mozku Bonsai a vybranou architekturou x64
Obrázek exportovaného mozku se zabalí jako kontejner Dockeru, uloží se do ACR přidruženého k vašemu pracovnímu prostoru a přidá se do seznamu dostupných mozku v části Exported Brains (Exportovaný mozek) v nabídce vlevo.
Bonsai zobrazí exportovaný mozek podle názvu, který přiřadíte během exportu. Úplný název image v ACR BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE je, kde:
- BRAIN_NAME je lidsky čitelný název přiřazený mozku během exportu.
- VERZE je verze mozku, kterou jste se rozhodli exportovat.
- OS_TYPE je operační systém nastavený během exportu.
- ARCHITEKTURA je architektura procesoru, kterou jste vybrali během exportu.
Krok 2: Stažení a spuštění kontejneru Dockeru
Stažení exportovaného mozku:
- Přihlaste se k Azure Container Registry pomocí Azure CLI:
az login az acr login --name ACR_NAME - Načíst kontejnerizovaný obrázek mozku a uložit ho do místního počítače:
docker pull \ WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE - Spusťte kontejner jako místní server:
docker run \ --detach \ --publish 5000:5000 \ --name CONTAINER_NAME \ WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE
- ACR_NAME: Název vaší instance Azure Container Registry (ACR).
- WORKSPACE_NAME:Název, který jste dali pracovnímu prostoru při jeho zřízení.
- WORKSPACE_ID:ID prostředku vašeho pracovního prostoru přiřazené Azure.
- CONTAINER_NAME:Lidsky čitelný název místního kontejneru Dockeru.
Příznak detach spustí kontejner na pozadí, aniž by blokoval váš terminál. Příznak sděluje Dockeru, že má směrovat provoz na publish portu 5000 kontejneru na port 5000 na místním počítači ( localhost:5000 ).
Tip
Příkazy pro stažení a spuštění můžete zkopírovat a všechny zástupné symboly automaticky vyplníte z uživatelského Bonsai rozhraní:
- Klikněte na nabídku možností (...) vedle vyexportovaného mozku, který chcete stáhnout.
- Vyberte Zobrazit informace o stažení a zobrazte příkazy Bash.
Krok 3: Kontrola stavu kontejneru
Stav místního kontejneru můžete zkontrolovat pomocí příkazu docker psdocker logs nebo .
Příkaz docker ps vypíše ve výchozím nastavení stav všech spuštěných kontejnerů.
Kontejnerizované mozeky, které fungují správně, se zobrazí se stavem "Up" a bude indikovat, jak dlouho je kontejner spuštěný:
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1310dba590e3 cfe62aa00691 "predict -m /saved_m…" 2 days ago Up 34 hours 0.0.0.0:5000->5000/tcp CONTAINER_NAME
Krok 4: Promluvte si s vyexportovaným mozkum
Jakmile je kontejner spuštěný, můžete s mozekem komunikovat programově pomocí rozhraní Brain API a portu 5000 místního hostitele ( ).
Předpokládejme například, že máte v souboru rukopisu následující definice:
inkling "2.0"
using Math
using Goal
# Pole and track constants
const TrackLength = 0.5
const MaxPoleAngle = (12 * Math.Pi) / 180
# State info from the simulator
type SimState {
CartPosition: number, # Position of cart in meters
CartVelocity: number, # Velocity of cart in meters/sec
PoleAngle: number, # Current angle of pole in radians
PoleAngularVelocity: number, # Angular velocity of the pole in radians/sec
}
# Possible action results
type SimAction {
# Amount of force in x direction to apply to the cart.
Command: number<-1 .. 1>
}
# Define a concept graph with a single concept
graph (input: SimState): SimAction {
concept BalancePole(input): SimAction {
curriculum {
source simulator (Action: SimAction): SimState {
package "Cartpole"
}
# The objective of training is expressed as a goal with two
# objectives: keep the pole from falling over and stay on the track
goal (State: SimState) {
avoid `Fall Over`:
Math.Abs(State.pole_angle) in Goal.RangeAbove(MaxPoleAngle)
avoid `Out Of Range`:
Math.Abs(State.cart_position) in Goal.RangeAbove(TrackLength / 2)
}
}
}
}
Vaše volání rozhraní API by vypadalo takhle:
import requests
import json
# General variables
url = "http://localhost:5000"
predictPath = "/v2/clients/{clientId}/predict"
headers = {
"Content-Type": "application/json"
}
# Set a random UUID for the client.
# The same client ID will be used for every call
myClientId = str(uuid.uuid4())
# Build the endpoint reference
endpoint = url + predictPath.replace("{clientId}", myClientId)
# Set the request variables
requestBody = {
"state": {
"CartPosition": 3,
"CartVelocity": 1.5,
"PoleAngle": 0.75,
"PoleAngularVelocity": 0.1
}
}
# Send the POST request
response = requests.post(
endpoint,
data = json.dumps(requestBody),
headers = headers
)
# Extract the JSON response
prediction = response.json()
# Access the JSON result: full response object
print(prediction)
# Access the JSON result: all concepts
print(prediction['concepts'])
# Access the JSON result: specific field
print(prediction['concepts']['BalancePole']['action']['Command'])
Vaše volání rozhraní API by vypadalo takhle:
import requests
import json
# General variables
url = "http://localhost:5000"
predictionPath = "/v1/prediction"
headers = {
"Content-Type": "application/json"
}
# Build the endpoint reference
endpoint = url + predictionPath
# Set the request variables
requestBody = {
"CartPosition": 3,
"CartVelocity": 1.5,
"PoleAngle": 0.75,
"PoleAngularVelocity": 0.1
}
# Send the POST request
response = requests.post(
endpoint,
data = json.dumps(requestBody),
headers = headers
)
# Extract the JSON response
prediction = response.json()
# Access the JSON result: full response object
print(prediction)
# Access the JSON result: specific field
print(prediction['Command'])
Tip
Kontejner bude pro váš mozek obsluhovat podrobnosti rozhraní API, včetně vašich vlastních požadavků a objektů odpovědi na adrese . http://localhost:5000/v1/doc/index.html
Krok 5: Vyčištění
Jakmile místně dokončíte práci s mozekem, zastavte kontejner Dockeru.
Pokud chcete zastavit mozek, pomocí docker ps příkazu získejte ID místního kontejneru a docker stop CONTAINER_ID zastavte přidružený kontejner.
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1310dba590e3 cfe62aa00691 "predict -m /saved_m…" 2 days ago Up 34 hours 0.0.0.0:5000->5000/tcp CONTAINER_NAME
> docker stop 1310dba590e3