Azure OpenAI 服務自從推出以來一直非常熱門,但 Azure 背後還是存在的資源問題,這點從新模型都會分散上架在世界各地中不難看出來,另外還有呼叫時存在的 TPM 限制,這造成在實際使用時不得不建立出一大堆 AOAI 實例與 API 端點,在開發與管理上都會複雜許多。
為了解決這個問題,一個想法是如果可以透過某種機制在兩個 AOAI 端點間進行負載均衡,這就相當於擁有了兩倍的 TPM,因此,本篇將介紹如何使用 APIM 來達成這個目標。
系列文章
事前準備
在開始之前需要先建立好以下資源:
- 開發人員層級的 APIM
- 佈署於美國中北部的 Azure OpenAI 實例與模型
- 佈署於美國中南部的 Azure OpenAI 實例與模型
因為稍等會使用 gpt-35-turbo (0125) 來測試,所以選擇了該模型目前可使用的地區,可以根據自己的需求來選擇地區,另外這邊記得也先將 API 端點與 API KEY 記錄下來。
準備 API 文件
首先我們需要準備 Azure OpenAI 的 OpenAPI 規格文件,這份文件可以直接從官方 GitHub 上下載下來,除非你有在 APIM 的開發者頁面查看 API 規格的需求,不然這邊使用任何一個 API 版本都是可以的。
下載到本地端後,我們需要先將開頭部分的 servers.url 拿掉,修改完成後應該會長這樣:
匯入 API
接著進到 APIM 的 API 頁面,選擇使用 OpenAPI 來建立一個新的 API。
在 OpenAPI specification 中上傳剛剛修改好的 OpenAPI 規格文件,按下建立就可以了。
設定 API Policy
再來就是最關鍵的負載均衡規則了,在這個規則中,我們會將進入的流量輪流轉發到事前準備好的中北美與中南美兩個 API 端點上。
在流量每次進入時,會先使用 cache-lookup-value 查找存在快取中的 backend-counter 值,決定這一次要使用哪一個 API 端點,再用 set-backend-service 來設定給 APIM,最後還需要使用 set-header 來帶上 API 端點對應的 API KEY,以上就完成一次呼叫。
測試 API
我們使用 Postman 來進行測試,預設情況下 APIM 上的 API 都是受到 Subscription Key 保護的,而這可以在 APIM 的 Portal 上找到,並且把它帶在請求 Header 的 Ocp-Apim-Subscription-Key 中。
可以看到我們呼叫的 URL 開頭是 APIM 的域名,而後半段就是 Azure OpenAI 的 Chat Completions API,其他都與原本的用法保持一致。
再來我們多重複幾次:
仔細觀察響應 Headers 中的 x-ms-region,如我們預期的在 North Central US 與 South Central US 間反覆輪替,測試成功!
結論
到這邊我們成功使用 APIM 在兩個 AOAI 端點間進行負載均衡,TPM 限制因此提升為原來的兩倍,同時也不用再管哪個專案哪個部門使用了哪一個 API 端點,所有的開發人員都只需要知道 APIM 的單一入口。
當然這只是一個初步的概念驗證,真正的生產環境還有非常多細節需要被考量,有機會再慢慢整理到後續的文章中。
留言
張貼留言