Exportera och köra en tränad hjärna
- Total tid att slutföra:15 minuter
- Aktiv tid:10 minuter
- Exporttid:5 minuter
Använd funktionen Exportera hjärna för att paketera din tränade hjärna som en containertjänst som kan köras var som helst där Docker är installerat, inklusive din lokala dator.
Anteckning
Bonsai export stöder följande processorarkitekturer:
- x64:AMD- och Intel-system på 64-bitars eller 32-bitars maskinvara (allmänna Linux-system)
- arm64 (v8): 64-bitars RISC-system (Raspberry Pi 3+, Linux, nyare industriella system)
- arm32 (v7): 32-bitars RISC-system (Raspberry Pi 1, Raspberry Pi 2, Linux, äldre industriella system)
Innan du börjar
- Du måste ha Azure CLI installerat.
- Du måste ha Docker installerat på den lokala datorn. Community-versionen av Docker är tillgänglig för Windows,Linuxoch MacOS.
- Du måste ha läs-/skrivåtkomst till Azure Container Registry (ACR). Bonsai tillhandahåller en standard-ACR när du etablerar en arbetsyta under samma resursgrupp som arbetsytan.
- Du måste ha en färdig, fullständigt tränad hjärna.
Steg 1: Exportera hjärnan som en Docker-avbildning
- Logga in på Bonsai UI .
- Välj den hjärna och version som du vill arbeta med.
- Gå till panelen Träna.
- Klicka på knappen Exportera hjärna.
- I dialogrutan som öppnas:
- Ange ett namn för den exporterade hjärnan.
- Välj den processorarkitektur som hjärnan ska köras på.
Skärmbild av Bonsai exporth brain-panelen med x64-arkitekturen vald".
En bild av den exporterade hjärnan paketeras som en Docker-container, sparas i ACR som är associerad med din arbetsyta och läggs till i listan över tillgängliga hjärna under Exporterade hjärna i den vänstra menyn.
Bonsai visar exporterade hjärna med det namn som du tilldelar under exporten. Det fullständiga avbildningsnamnet i ACR BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE är där:
- BRAIN_NAME är det läsbara namn som tilldelats hjärnan under exporten.
- VERSION är den brain-version som du valde att exportera.
- OS_TYPE är det operativsystem som angetts under exporten.
- ARCHITECTURE är den processorarkitektur som du valde under exporten.
Steg 2: Ladda ned och kör Docker-containern
Så här laddar du ned din exporterade hjärna:
- Logga in på Azure Container Registry med Azure CLI:
az login az acr login --name ACR_NAME - Hämta den containeriserade brain-avbildningen och spara den på din lokala dator:
docker pull \ WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE - Kör containern som en lokal server:
docker run \ --detach \ --publish 5000:5000 \ --name CONTAINER_NAME \ WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE
- ACR_NAME:Namnet på din Azure Container Registry (ACR)-instans.
- WORKSPACE_NAME:Det namn som du gav arbetsytan när den etablerades.
- WORKSPACE_ID:Det Azure-tilldelade resurs-ID:t för din arbetsyta.
- CONTAINER_NAME:Ett läsbart namn för den lokala Docker-containern.
Flaggan detach startar containern i bakgrunden utan att blockera terminalen. Flaggan publish uppmanar Docker att dirigera trafik på 5000 containerporten till porten 5000 på den lokala datorn ( localhost:5000 ).
Tips
Du kan kopiera kommandona för att ladda ned och köra med alla platshållare ifyllda automatiskt från Bonsai användargränssnittet:
- Klicka på alternativmenyn (...) bredvid den exporterade hjärnan som du vill ladda ned.
- Välj Visa nedladdningsinformation för att visa bash-kommandona.
Steg 3: Kontrollera containerstatusen
Du kan kontrollera statusen för din lokala container med docker ps kommandot docker logs eller .
Kommandot docker ps visar status för alla containrar som körs som standard.
Containerh brains som körs korrekt visas med statusen "Upp" och anger hur länge containern har körts:
> 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
Steg 4: Prata med den exporterade hjärnan
När containern körs kan du kommunicera med hjärnan programmatiskt med hjälp av brain-API:et och port 5000 för localhost ( ).
Anta till exempel att du har följande definitioner i indelningsfilen:
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)
}
}
}
}
Api-anropet skulle se ut så här:
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'])
Api-anropet skulle se ut så här:
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'])
Tips
Containern kommer att visa API-information för hjärnan, inklusive dina anpassade begärande- och svarsobjekt på http://localhost:5000/v1/doc/index.html
Steg 5: Rensa
Stoppa Docker-containern när du har arbetat klart med hjärnan lokalt.
Om du vill stoppa hjärnan använder du kommandot docker ps för att hämta det lokala container-ID:t och för att stoppa den associerade docker stop CONTAINER_ID containern.
> 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