Betanított agy exportálása és futtatása


  • A teljes idő: 15 perc
  • Aktív idő: 10 perc
  • Exportálási idő: 5 perc

Az exportálási agyi függvény használatával a betanított agyat tárolóba csomagolhatja olyan szolgáltatásként, amely bárhol futtatható, ahol a Docker telepítve van, beleértve a helyi gépet is.

Megjegyzés

A Bonsai-exportálás a következő processzorarchitektúrákat támogatja:

  • x64: AMD és Intel rendszerek 64 bites vagy 32 bites hardveren (általános célú Linux rendszerek)
  • arm64 (v8): 64 bites RISC-rendszerek (Raspberry Pi 3+, Linux, újabb ipari rendszerek)
  • arm32 (v7): 32 bites RISC-rendszerek (Raspberry Pi 1, Raspberry Pi 2, Linux, régebbi ipari rendszerek)

Előkészületek

  • Az Azure CLI-nek telepítve kell lennie.
  • A Dockernek telepítve kell lennie a helyi gépen. A Docker community kiadása a következő rendszerekhez érhető el: Windows, Linuxés MacOS.
  • Olvasási/írási hozzáféréssel kell Azure Container Registry -hez (ACR). Bonsai egy alapértelmezett ACR-t biztosít, amikor a munkaterülettel azonos erőforráscsoportban létesít egy munkaterületet.
  • Teljes körűen betanított Bonsai-agyval kell, hogy legyen.

1. lépés: Az agy exportálása Docker-rendszerképként

  1. Jelentkezzen be a Bonsai felhasználói felületére.
  2. Válassza ki a dolgozni kívánt agyat és verziót.
  3. Lépjen a Betanítás panelre.
  4. Kattintson az Agy exportálása gombra.
  5. A megnyíló párbeszédpanelen:
    • Adja meg az exportált agy nevét.
    • Válassza ki azt a processzorarchitektúrát, amely alapján az agy futni fog.

Agyexportás

Képernyőkép a Bonsai exportálási agypaneljéről az x64 architektúra kiválasztva" beállítással.

Az exportált agy rendszerképe Docker-tárolóként van csomagolva, a munkaterülethez társított ACR-be mentve, és a bal oldali menüben az Elérhető agyak listájához lesz hozzáadva.

Bonsai az exportálás során hozzárendelt név alapján jeleníti meg az exportált agyat. Az ACR teljes rendszerképneve a BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE következő:

  • BRAIN_NAME az ember által olvasható név, amely az exportálás során az agyhoz van rendelve.
  • A VERSION az az agyverzió, amelyről az exportálást választotta.
  • OS_TYPE az exportálás során beállított operációs rendszer.
  • Az ARCHITEKTÚRA az exportálás során kiválasztott processzorarchitektúra.

2. lépés: A Docker-tároló letöltése és futtatása

Az exportált agy letöltése:

  1. Jelentkezzen be a Azure Container Registry az Azure CLI használatával:
    az login
    az acr login --name ACR_NAME
    
  2. Hívja le a tárolóba helyezni az agy rendszerképét, és mentse a helyi gépre:
    docker pull \
      WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE
    
  3. Futtassa a tárolót helyi kiszolgálóként:
    docker run              \
      --detach              \
      --publish 5000:5000   \
      --name CONTAINER_NAME \
      WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE
    
  • ACR_NAME: A Azure Container Registry (ACR) példány neve.
  • WORKSPACE_NAME: A Bonsai-munkaterületnek a kiépítéskor adott név.
  • WORKSPACE_ID: A Bonsai-munkaterület Azure által hozzárendelt erőforrás-azonosítója.
  • CONTAINER_NAME: A helyi Docker-tároló ember által olvasható neve.

A jelző a terminál blokkolása nélkül detach elindítja a tárolót a háttérben. A jelző arra utasítja a Dockert, hogy a tároló portján keresztül a forgalmat a helyi gépen publish 5000 ( ) található 5000 portra irányítsa. localhost:5000

Tipp

A letöltési és futtatott parancsokat a Bonsai felhasználói felületről automatikusan kitöltött helyőrzők használatával másolhatja ki:

  1. Kattintson a letölteni kívánt exportált agy melletti options (...) menüre.
  2. A Bash-parancsok megjelenítéséhez válassza a Letöltési adatok megtekintése lehetőséget.

3. lépés: A tároló állapotának ellenőrzése

A helyi tároló állapotát a vagy a paranccsal docker ps docker logs ellenőrizheti.

A parancs alapértelmezés szerint felsorolja az összes docker ps futó tároló állapotát.

A megfelelően futó tárolóba sorolt agy "Fel" állapottal fog megjelenik a listában, és jelzi, hogy mennyi ideje fut a tároló:

> 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

4. lépés: Az exportált agyval való beszélgetés

Ha a tároló fut, programozott módon kommunikálhat az agyval a Brain API és a localhost ( ) 5000-es portjának localhost:5000 használatával.

Tegyük fel például, hogy a következő definíciók vannak a inkling fájlban:

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)
      }
    }
  }
}

Az API-hívás így néz ki:

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'])

Az API-hívás így néz ki:

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'])

Tipp

A tároló az agy API-adatait fogja kiszolgálni, beleértve az egyéni kérés- és válaszobjektumokat a következőnél: http://localhost:5000/v1/doc/index.html

5. lépés: A tisztítás

Állítsa le a Docker-tárolót, ha befejezte a helyi agyi munkát.

Az agyat az paranccsal állíthatja le a helyi tároló azonosítójának leállítására és docker ps docker stop CONTAINER_ID a társított tároló leállítására.

> 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