Eğitilmiş bir beyni dışarı aktarın ve çalıştırın


  • Toplam tamamlanma süresi: 15 dakika
  • Etkin süre: 10 dakika
  • Dışarı aktarma süresi: 5 dakika

Eğitilen beyninizi Docker'ın yüklü olduğu her yerde çalıştırabilen bir kapsayıcılı hizmet olarak paketlemek için dışarı aktarma beyin işlevini kullanın( yerel makineniz de dahil).

Not

Bonsai export aşağıdaki işlemci mimarilerini destekler:

  • x64: 64 bit veya 32 bit donanım üzerinde AMD ve Intel sistemleri (genel amaçlı Linux sistemleri)
  • arm64 (v8): 64 bit RISC sistemleri (Raspberry Pi 3+, Linux, daha yeni endüstriyel sistemler)
  • arm32 (v7): 32 bit RISC sistemleri (Raspberry Pi 1, Raspberry Pi 2, Linux, eski endüstriyel sistemler)

Başlamadan önce

  • Azure CLI yüklü olmalıdır.
  • Yerel makinenizde Docker yüklü olmalıdır. Docker'ın topluluk sürümü Windows, Linux ve MacOS için kullanılabilir.
  • Azure Container Registry (ACR) için okuma/yazma erişiminiz olmalıdır. Bonsai , çalışma alanıyla aynı kaynak grubu altında bir çalışma alanı sağladığınızda varsayılan bir ACR sağlar.
  • Tamamlanmış, tamamen eğitimli Bonsai bir beynin olmalı.

1. Adım: Beyni docker görüntüsü olarak dışarı aktarma

  1. Kullanıcı arabirimindeBonsai oturum açın.
  2. Çalışmak istediğiniz beyni ve sürümü seçin.
  3. Eğit paneli'ne gidin.
  4. Beyni dışarı aktar düğmesine tıklayın.
  5. Açılan iletişim kutusunda:
    • Dışarı aktarılan beyin için bir ad verin.
    • Beynin üzerinde çalıştıracağı işlemci mimarisini seçin.

Brain export

x64 mimarisinin Bonsai seçili olduğu dışarı aktarma beyin panelinin ekran görüntüsü".

Dışarı aktarılan beynin görüntüsü Bir Docker kapsayıcısı olarak paketlenmiştir, çalışma alanınızla ilişkili ACR'ye kaydedilir ve sol taraftaki menüde Dışarı Aktarılan Beyinler'in altındaki kullanılabilir beyinler listesine eklenir.

Bonsai dışarı aktarılan beyinleri dışarı aktarma sırasında atadığınız ada göre görüntüler. ACR'deki tam görüntü adı şu noktadır BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE :

  • BRAIN_NAME , dışarı aktarma sırasında beyne atanan insan tarafından okunabilen addır.
  • VERSION , dışarı aktarmayı seçtiğiniz beyin sürümüdür.
  • OS_TYPE , dışarı aktarma sırasında ayarlanan işletim sistemidir.
  • MİMARİ , dışarı aktarma sırasında seçtiğiniz işlemci mimarisidir.

Adım2: Docker kapsayıcısını indirme ve çalıştırma

Dışarı aktarılan beyninizi indirmek için:

  1. Azure CLI ile Azure Container Registry oturum açın:
    az login
    az acr login --name ACR_NAME
    
  2. Kapsayıcılı beyin görüntüsünü alın ve yerel makinenize kaydedin:
    docker pull \
      WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE
    
  3. Kapsayıcıyı yerel sunucu olarak çalıştırın:
    docker run              \
      --detach              \
      --publish 5000:5000   \
      --name CONTAINER_NAME \
      WORKSPACE_NAME.azurecr.io/WORKSPACE_ID/BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE
    
  • ACR_NAME: Azure Container Registry (ACR) örneğinizin adı.
  • WORKSPACE_NAME: Çalışma alanınız sağlandığında çalışma alanınıza Bonsai vermiş olduğunuz ad.
  • WORKSPACE_ID: Çalışma alanınızın Bonsai Azure tarafından atanan kaynak kimliği.
  • CONTAINER_NAME: Yerel Docker kapsayıcısı için okunabilir bir ad.

bayrağı, detach terminalinizi engellemeden kapsayıcıyı arka planda başlatır. bayrağı Docker'a publish kapsayıcının bağlantı noktasındaki 5000 trafiği yerel makinenizdeki ()localhost:5000 bağlantı noktasına 5000 yönlendirmesini söyler.

İpucu

İndirme ve çalıştırma komutlarını tüm yer tutucular kullanıcı arabiriminden Bonsai otomatik olarak doldurulmuş olarak kopyalayabilirsiniz:

  1. İndirmek istediğiniz dışarı aktarılan beynin yanındaki seçenekler menüsüne (...) tıklayın.
  2. Bash komutlarını görüntülemek için İndirme bilgilerini görüntüle'yi seçin.

3. Adım: Kapsayıcının durumunu denetleme

yerel kapsayıcınızın durumunu veya docker logs komutuyla docker ps de kontrol edebilirsiniz.

docker ps komutu, varsayılan olarak çalışan tüm kapsayıcıların durumunu listeler.

Düzgün çalışan kapsayıcılı beyinler "Yukarı" durumuyla listelenir ve kapsayıcının ne kadar süredir çalıştığını gösterir:

> 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. Adım: Dışarı aktarılan beyinle konuşun

Kapsayıcı çalıştırıldıktan sonra Beyin API'sini ve localhost'un 5000 numaralı bağlantı noktasını (localhost:5000) kullanarak beyinle programlama yoluyla iletişim kurabilirsiniz.

Örneğin, Mürekkep Oluşturma dosyanızda aşağıdaki tanımların olduğunu varsayalım:

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 çağrınız şöyle görünü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'])

İpucu

Kapsayıcı, özel isteğiniz ve yanıt nesneleriniz de dahil olmak üzere beyniniz için API ayrıntılarını sunar http://localhost:5000/swagger.html

API çağrınız şöyle görünü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'])

İpucu

Kapsayıcı, özel isteğiniz ve yanıt nesneleriniz de dahil olmak üzere beyniniz için API ayrıntılarını sunar http://localhost:5000/v1/doc/index.html

5. Adım: Temizleme

Beyinle yerel olarak çalışmayı bitirdiğinizde Docker kapsayıcısını durdurun.

Beyni durdurmak için komutunu kullanarak docker ps yerel kapsayıcı kimliğini alın ve docker stop CONTAINER_ID ilişkili kapsayıcıyı durdurun.

> 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