利用GPU性能指標進行彈性伸縮
隨著人工智能大潮的風起雲湧, 視頻識別,語音識別,圖像識別,自然語言翻譯,AI畫匠等基於GPU的在線預測也在遍地開花。而彈性伸縮對於人工智能服務來說尤為重要,一方麵是業務壓力峰值時巨大的計算力需求;另一方麵當業務空閑時,GPU的空耗成本也是大家很難承受的。同時在與客戶的交流中,我們也發現客戶對於GPU資源的彈性伸縮也有很強的定製化需求,希望能自主控製觸發條件,並在此基礎上和自身業務指標相結合等等。
基於這種現實,我們提供了一套容器服務所擴容觸發器結合第三方監控框架influxDB+Grafana的報警伸縮方案。 具體來說,分為4個部分:
- 創建容器服務節點擴縮容觸發器
- 部署基於Grafana和InfluxDB的GPU監控應用
- 在Grafana中設置通知渠道,通過Webhook調用縮擴容觸發器
- 定義觸發條件
創建觸發器
參考 利用阿裏雲容器服務實現自定義節點伸縮 創建觸發器trigger_url, 請將這個觸發器妥善保存。這裏觸發器的價值在於:
a) 預先指定擴容機器的配置,以及彈性伸縮的上下限;無需用戶寫複雜API調用擴容
b) 當縮容時,係統自動判斷可以回收的機器;用戶隻需要觸發,對於縮容細節無需了解
擴容觸發器的URL通常為
https://cs.console.aliyun.com/hook/trigger?triggerUrl=<triggerUrl>=&secret=<secret>&type=scale_out&step=1
縮容觸發器的URL通常為
https://cs.console.aliyun.com/hook/trigger?triggerUrl=<triggerUrl>=&secret=<secret>&type=scale_in
部署GPU監控應用
在容器服務裏可以支持influxDB, 這裏我們的方案是部署 influxDB+Grafana,利用Grafana的報警機製
- 登錄 容器服務管理控製台。
2. 單擊左側導航欄中的 節點。
3. 選擇您創建的GPU集群, 並且將鼠標挪動到任何一個節點信息附近感歎號圖標。
4. 這時,可以看到當前節點的NODE_IP和NODE_ID。在本例子中,您的NODE_IP是 192.168.10.86 , NODE_ID是 1。請記住該信息。 我們在下一步中將使用該信息部署GPU監控應用。
5. 請將下麵的應用模板部署到集群中, 單擊左側導航欄中的 應用, 並點擊 創建應用 按鈕。
version: '2'
services:
# Define an InfluxDB service
influxdb:
container_name: influxdb
image: influxdb:0.13
volumes:
- /var/lib/influxdb
ports:
- 8086:8086
- 8083:8083
labels:
aliyun.monitoring.addon.influxdb: "https://${NODE_IP}:8086"
environment:
- constraint:aliyun.node_index==${NODE_ID}
grafana:
image: grafana/grafana:4.4.3
container_name: grafana
ports:
- 3000:3000
links:
- influxdb
environment:
- GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD}
labels:
aliyun.routing.port_3000: grafana
config:
image: registry.cn-beijing.aliyuncs.com/cheyang/grafana-config:egs-4.4.3
links:
- grafana:grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD}
6. 在部署應用時,需要填寫模板參數: NODE_IP, NODE_ID以及後續登錄Grafana需要的ADMIN_PASSWORD, 點擊確定後,監控應用就開始創建了。
7. 等監控應用創建成功後,在應用列表頁麵,單擊本示例所創建應用的名稱 grafana
8. 在服務頁麵點擊 grafana 的 訪問端點, 就可以登錄 grafana 的登錄界麵
9. 在Grafana登錄界麵輸入用戶名admin和您之前設置的密碼(ADMIN_PASSWORD對應的值), 您就可以看到GPU的性能數據,其中包括集群級別的和節點級別的。
設置通知渠道, 這裏使用 webhook
- 點擊 admin-> Alerting-> Notification channels
2. 點擊右上角 New Channel,就可以進行通知渠道的配置, 完成後點擊保存
- **Name: ** 通知渠道名稱,這裏代表擴容,取名scale_out
- **Type: ** 通知類型,這裏代選擇 webhook
- **Url: ** webhook觸發的Url, 這裏前麵獲得的彈性擴容Trigger Url
- **Http Method: ** 這裏指觸發Trigger Url的Http Action,請選擇 POST
3. 這樣就可以在通知渠道的列表頁麵看到 scale_out這個通知渠道
設置報警條件
- 點擊 admin->Dashboards->Home 回到Dashboard頁麵,直接點擊指標圖標題 GPU Usage, 然後選擇
Edit
2. 查看 Metrics 標簽頁中三條sql語句, 其中c 對應的是集群級別的GPU平均使用率, 這也是我們使用的報警條件;當然這個完全可以根據業務需要進行定製
關於$timeFilter GROUP BY time(30s)的含義,請參考 https://github.com/grafana/grafana/issues/7967
3. 跳轉到 Alert 標簽頁, 點擊 ** Create Alert **
4. 設置 Alert Config, 這裏設置的指標是集群GPU平均使用率大於45%時報警
- ** Query: ** 請設置為C,即集群級別的GPU使用率
- ** IS ABOVE: ** 大於45, 代表使用率大於45%
5. 關聯通知渠道, 單擊左側標題欄的 Notifications, 點擊 Send to
->+
, 選擇之前創建的 scale_out 通知渠道
6. 保存好後,圖表的標題前會有一個灰色的心形標誌, 這就代表設置完成,當對應指標達到配置的閾值就會出發報警,具體報警信息會觸發通知渠道調用webhook
測試彈性擴容
- 對集群中的GPU施壓,可以看到Grafana的視圖中已經顯示報警
2. 同時登陸容器服務管理的集群頁麵可以看到GPU集群的狀態是伸縮中
3. 當擴容完成後,可以看到容器集群的節點數由2個增加到了3個.
4. 在Grafana的視圖中也可以看到GPU使用率已經回到正常範圍,集群狀態恢複正常
總結
本文為您提供了一套可以拚裝組合的GPU彈性伸縮方案,其中觸發器與伸縮觸發條件可以分離,觸發條件也可以有更靈活的配置性。您可以根據峰值時間寫一個crontab來觸發,也可以寫與您具體需求相符合的Alert條件, 滿足應用運行的需要。阿裏雲容器服務希望為您提供元語,幫助您因地製宜的定義符合自身場景的彈性縮擴容方案。
最後更新:2017-09-28 23:03:17