Een getraind brein exporteren en uitvoeren
- Totale tijd om te voltooien:15 minuten
- Actieve tijd:10 minuten
- Exporttijd:5 minuten
Gebruik de functie brain exporteren om uw getrainde brein te verpakken als een service in een container die kan worden uitgevoerd waar Docker is geïnstalleerd, inclusief uw lokale computer.
Notitie
Bonsai export ondersteunt de volgende processorarchitectarchitecten:
- x64:AMD- en Intel-systemen op 64-bits of 32-bits hardware (algemene Linux-systemen)
- arm64 (v8): 64-bits RISC-systemen (Raspberry Pi 3+, Linux, nieuwere industriële systemen)
- arm32 (v7): 32-bits RISC-systemen (Raspberry Pi 1, Raspberry Pi 2, Linux, oudere industriële systemen)
Voordat u begint
- U moet de Azure CLI hebben geïnstalleerd.
- Docker moet zijn geïnstalleerd op uw lokale computer. De community-editie van Docker is beschikbaar voor Windows,Linuxen MacOS.
- U moet lees-/schrijftoegang hebben tot Azure Container Registry (ACR). Bonsai biedt een standaard-ACR wanneer u een werkruimte inrichten onder dezelfde resourcegroep als de werkruimte.
- U moet een voltooid, volledig getraind brein hebben.
Stap 1: het brein exporteren als een Docker-afbeelding
- Meld u aan bij Bonsai UI de .
- Selecteer het brein en de versie waar u mee wilt werken.
- Navigeer naar het deelvenster Trainen.
- Klik op de knop Brein exporteren.
- In het dialoogvenster dat wordt geopend:
- Geef een naam op voor het geëxporteerde brein.
- Selecteer de processorarchitectuur op het brein.
Schermopname van het Bonsai deelvenster Brein exporteren met x64-architectuur geselecteerd'.
Een afbeelding van het geëxporteerde brein wordt verpakt als een Docker-container, opgeslagen in de ACR die is gekoppeld aan uw werkruimte en toegevoegd aan de lijst met beschikbare hersenen onder Geëxporteerde hersenen in het menu aan de linkerkant.
Bonsai geeft geëxporteerde hersenen weer op de naam die u tijdens het exporteren toewijst. De volledige naam van de afbeelding in ACR is BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE waar:
- BRAIN_NAME is de voor mensen leesbare naam die tijdens het exporteren aan het brein is toegewezen.
- VERSION is de breinversie die u hebt gekozen om te exporteren.
- OS_TYPE is het besturingssysteem ingesteld tijdens het exporteren.
- ARCHITECTURE is de processorarchitectuur die u tijdens het exporteren hebt geselecteerd.
Stap 2: de Docker-container downloaden en uitvoeren
Uw geëxporteerde brein downloaden:
- Meld u aan bij Azure Container Registry azure cli:
az login az acr login --name ACR_NAME - Haal de in een container geplaatste breinafbeelding op en sla deze op uw lokale computer op:
docker pull \ WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE - Voer de container uit als een lokale server:
docker run \ --detach \ --publish 5000:5000 \ --name CONTAINER_NAME \ WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE
- ACR_NAME:de naam van uw Azure Container Registry (ACR)-exemplaar.
- WORKSPACE_NAME:de naam die u aan uw werkruimte hebt gegeven toen deze werd ingericht.
- WORKSPACE_ID:de door Azure toegewezen resource-id van uw werkruimte.
- CONTAINER_NAME:een voor mensen leesbare naam voor de lokale Docker-container.
Met detach de vlag wordt de container op de achtergrond gestart zonder dat uw terminal wordt geblokkeerd. De publish vlag laat Docker weten dat verkeer op de poort van 5000 de container naar de poort op uw lokale computer ( ) moet worden 5000localhost:5000 doorgeleid.
Tip
U kunt de download- en run-opdrachten kopiëren met alle tijdelijke aanduidingen die automatisch zijn ingevuld vanuit de Bonsai gebruikersinterface:
- Klik op het optiesmenu (...) naast het geëxporteerde brein dat u wilt downloaden.
- Selecteer Downloadgegevens weergeven om de bash-opdrachten weer te geven.
Stap 3: controleer de status van de container
U kunt de status van uw lokale container controleren met de docker ps opdracht of docker logs .
Met docker ps de opdracht wordt standaard de status van alle containers weergegeven die worden uitgevoerd.
In containers geplaatste hersenen die correct worden uitgevoerd, worden weergegeven met de status 'Up' en geven aan hoelang de container wordt uitgevoerd:
> 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
Stap 4: Praten met het geëxporteerde brein
Zodra de container wordt uitgevoerd, kunt u programmatisch communiceren met het brein met behulp van de Brain API en poort 5000 van de localhost ( ).
Stel dat u de volgende definities in uw Inkling-bestand hebt:
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)
}
}
}
}
Uw API-aanroep ziet er als volgende uit:
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'])
Uw API-aanroep ziet er als volgende uit:
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
De container biedt API-gegevens voor uw brein, met inbegrip van uw aangepaste aanvraag- en antwoordobjecten op http://localhost:5000/v1/doc/index.html
Stap 5: ops schonen
Stop de Docker-container wanneer u klaar bent met lokaal werken met het brein.
Als u het brein wilt stoppen, gebruikt u docker ps de opdracht om de lokale container-id op te halen en de docker stop CONTAINER_ID bijbehorende container te stoppen.
> 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