Eğitilen bir beyini dışa aktarma ve çalıştırma
- Toplam tamamlanma süresi: 15 dakika
- Etkin zaman: 10 dakika
- Dışarı aktarma süresi: 5 dakika
Yerel makineniz dahil olmak üzere her yerde Docker 'ın yüklü olduğu her yerde çalışabilen bir kapsayıcı hizmet olarak eğitimli beyninizi paketlemek için dışarı aktarma beyinini kullanın.
Not
Bonsai dışarı aktarma aşağıdaki işlemci mimarilerini destekler:
- x64: 64 bit veya 32 bit donanımda 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, daha eski endüstriyel sistemler)
Başlamadan önce
- Azure CLI 'nın yüklü olması gerekir.
- Yerel makinenizde Docker yüklü olmalıdır. docker community edition Windows, Linuxve macos'ta kullanılabilir.
- Azure Container Registry (ACR) için okuma/yazma erişiminizin olması gerekir. 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ış ve tamamen eğitilen bir beyiniz olmalıdır.
1. Adım: beyni Docker görüntüsü olarak dışa aktarma
- İçinde oturum açın Bonsai UI .
- Birlikte çalışmak istediğiniz beyini ve sürümü seçin.
- Tren paneline gidin.
- Dışarı aktar betıkla düğmesine tıklayın.
- Açılan iletişim kutusunda:
- İçe aktarılmış Bemek için bir ad sağlayın.
- Beynin çalışacağı işlemci mimarisini seçin.
BonsaiX64 mimarisi seçiliyken dışa aktarma beyninin ekran görüntüsü ".
İçe aktarılmış Bekinin görüntüsü bir Docker kapsayıcısı olarak paketlenir, çalışma alanım ile ilişkili ACR 'ye kaydedilir ve sol taraftaki menüde, Içe aktarılmış Brains 'in altındaki kullanılabilir Brains listesine eklenir.
Bonsai dışarı aktarma sırasında atadığınız ada göre dışarı aktarılmış Brains 'i görüntüler. ACR 'deki tam görüntü adı şu BRAIN_NAME:VERSION-OS_TYPE-ARCHITECTURE konumda:
- BRAIN_NAME , dışa aktarma sırasında beyine atanan okunabilir addır.
- Sürüm , dışarı aktarmak için seçtiğiniz beze sürümüdür.
- OS_TYPE , dışa aktarma sırasında işletim sistemi kümesidir.
- Mimari , dışa aktarma sırasında seçtiğiniz işlemci mimarisidir.
Step2: Docker kapsayıcısını Indirme ve çalıştırma
Verdiğiniz beyninizi indirmek için:
- Azure CLı ile Azure Container Registry oturum açın:
az login az acr login --name ACR_NAME - Kapsayıcılı beyini görüntüsünü alıp 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ıza verdiğiniz ad.
- WORKSPACE_ID: çalışma alanınızın Azure tarafından atanan kaynak kimliği .
- CONTAINER_NAME: yerel Docker kapsayıcısı için okunabilir bir ad.
Bayrak, siz detach terminalinizi engellemeden kapsayıcıyı arka planda başlatır. publishBayrak, Docker 'a kapsayıcının bağlantı noktasındaki trafiği 50005000 Yerel makinenizde () bağlantı noktasına yönlendirmenize yol gösterir localhost:5000 .
İpucu
İndir ve Çalıştır komutlarını, kullanıcı arabiriminden otomatik olarak doldurulmuş tüm yer tutucuları ile kopyalayabilir Bonsai :
- İndirmek istediğiniz içe aktarılmış beynin yanındaki Seçenekler menüsüne (...) tıklayın.
- Bash komutlarını görüntülemek için indirme bilgilerini görüntüle ' yi seçin.
3. Adım: kapsayıcının durumunu denetleme
Veya komutuyla yerel kapsayıcının durumunu kontrol edebilirsiniz docker psdocker logs .
docker psKomutu, tüm çalışan kapsayıcıların durumunu varsayılan olarak listeler.
Düzgün çalışan Kapsayıcılı Brains, "Up" durumu ile listelenir ve kapsayıcının ne kadar süreyle ç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: ihraç bedelim ile konuşun
Kapsayıcı çalışmaya başladıktan sonra, InPort API 'sini ve localhost () numaralı bağlantı 5000 noktasını kullanarak betikten sonra programlama ile iletişim kurabilirsiniz .
Örneğin, Inkling dosyanızda aşağıdaki tanımlarınız 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 aramanı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'])
API aramanı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ıda özel istek ve yanıt nesneleriniz de dahil olmak üzere beyinleriniz için API ayrıntıları sunulacaktır. http://localhost:5000/v1/doc/index.html
5. Adım: Temizleme
Beyinle yerel olarak çalışmayı bitirdiğinizde Docker kapsayıcısını durdurun.
Beyinyi 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