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
- Kullanıcı arabirimindeBonsai oturum açın.
- Çalışmak istediğiniz beyni ve sürümü seçin.
- Eğit paneli'ne gidin.
- Beyni dışarı aktar düğmesine tıklayın.
- 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.
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:
- Azure CLI ile Azure Container Registry oturum açın:
az login az acr login --name ACR_NAME
- 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
- 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:
- İndirmek istediğiniz dışarı aktarılan beynin yanındaki seçenekler menüsüne (...) tıklayın.
- 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