閱讀473 返回首頁    go 小米 go 小米6


利用GPU性能指標進行彈性伸縮

隨著人工智能大潮的風起雲湧, 視頻識別,語音識別,圖像識別,自然語言翻譯,AI畫匠等基於GPU的在線預測也在遍地開花。而彈性伸縮對於人工智能服務來說尤為重要,一方麵是業務壓力峰值時巨大的計算力需求;另一方麵當業務空閑時,GPU的空耗成本也是大家很難承受的。同時在與客戶的交流中,我們也發現客戶對於GPU資源的彈性伸縮也有很強的定製化需求,希望能自主控製觸發條件,並在此基礎上和自身業務指標相結合等等。

基於這種現實,我們提供了一套容器服務所擴容觸發器結合第三方監控框架influxDB+Grafana的報警伸縮方案。 具體來說,分為4個部分:

  1. 創建容器服務節點擴縮容觸發器
  2. 部署基於Grafana和InfluxDB的GPU監控應用
  3. 在Grafana中設置通知渠道,通過Webhook調用縮擴容觸發器
  4. 定義觸發條件

創建觸發器

參考 利用阿裏雲容器服務實現自定義節點伸縮 創建觸發器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的報警機製

  1. 登錄 容器服務管理控製台

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

  1. 點擊 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這個通知渠道

設置報警條件

  1. 點擊 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

測試彈性擴容

  1. 對集群中的GPU施壓,可以看到Grafana的視圖中已經顯示報警

2. 同時登陸容器服務管理的集群頁麵可以看到GPU集群的狀態是伸縮中

3. 當擴容完成後,可以看到容器集群的節點數由2個增加到了3個.

4. 在Grafana的視圖中也可以看到GPU使用率已經回到正常範圍,集群狀態恢複正常

總結

本文為您提供了一套可以拚裝組合的GPU彈性伸縮方案,其中觸發器與伸縮觸發條件可以分離,觸發條件也可以有更靈活的配置性。您可以根據峰值時間寫一個crontab來觸發,也可以寫與您具體需求相符合的Alert條件, 滿足應用運行的需要。阿裏雲容器服務希望為您提供元語,幫助您因地製宜的定義符合自身場景的彈性縮擴容方案。

最後更新:2017-09-28 23:03:17

  上一篇:go  李白詩句摘抄
  下一篇:go  智能機器人上演“最強大腦”,化身安全助手護航雲安全