計算資源優(yōu)化
基于云基礎(chǔ)設(shè)施的操作系統(tǒng)優(yōu)化
阿里云提供了Alibaba Cloud Linux操作系統(tǒng)鏡像,是阿里云基于龍蜥社區(qū)(OpenAnolis)的龍蜥操作系統(tǒng)(Anolis OS)打造的操作系統(tǒng)發(fā)行版,在兼容RHEL/CentOS生態(tài)的同時,為云上應(yīng)用程序提供安全、穩(wěn)定、高性能的定制化運行環(huán)境,并針對云基礎(chǔ)設(shè)施進行了深度優(yōu)化,打造更好的云上操作系統(tǒng)體驗。與阿里云基礎(chǔ)設(shè)施深度結(jié)合優(yōu)化,持續(xù)提升系統(tǒng)的啟動速度、運行時的性能。同時經(jīng)過海量阿里巴巴和阿里云的產(chǎn)品打磨,提供優(yōu)良的穩(wěn)定性體驗。在如下方面提供了特性優(yōu)化:
內(nèi)核方面:Alibaba Cloud Linux2基于Linux kernel 4.19 LTS定制而成;Alibaba Cloud Linux 3基于Linux kernel 5.10 LTS定制而成。系統(tǒng)在持續(xù)增加適用于云場景的新特性的同時,持續(xù)改進內(nèi)核性能并修復(fù)重大缺陷,并且提供針對ECS實例環(huán)境定制優(yōu)化的內(nèi)核啟動參數(shù)和系統(tǒng)配置參數(shù)
開機啟動速度:針對ECS實例環(huán)境大幅優(yōu)化啟動速度,在實際測試中,相比其他操作系統(tǒng)約減少60%的啟動時間。
運行時的系統(tǒng)性能:優(yōu)化調(diào)度、內(nèi)存以及IO等子系統(tǒng),在部分的開源基準測試中,相比其他操作系統(tǒng)約提升10%~30%性能。
針對特定業(yè)務(wù)場景性能優(yōu)化的 ECS 實例規(guī)格族選項
基于不同場景的需求,云服務(wù)器 ECS(Elastic Compute Service)為用戶提供了多種選擇。產(chǎn)品序列包含通用計算、異構(gòu)計算、高性能計算三大類,支持包括各類垂直場景增強型實例,比如網(wǎng)絡(luò)增強型、存儲增強型、內(nèi)存增強型、安全增強型、大數(shù)據(jù)型、高主頻型、異構(gòu)計算實例等,提供高性價比產(chǎn)品。對于特定的高性能場景,用戶可以根據(jù)業(yè)務(wù)場景來選擇,典型的如下幾類:
彈性裸金屬服務(wù)器 EBM(ECS Bare Metal Instance):基于阿里云完全自主研發(fā)的下一代虛擬化技術(shù)而打造的新型計算類服務(wù)器產(chǎn)品,兼具虛擬機的彈性和物理機的性能及功能特性。與上一代虛擬化技術(shù)相比,下一代虛擬化技術(shù)不僅保留了普通云服務(wù)器的彈性體驗,而且保留了物理機的性能與特性,全面支持嵌套虛擬化技術(shù)。彈性裸金屬服務(wù)器融合了物理機與云服務(wù)器的優(yōu)勢,實現(xiàn)超強超穩(wěn)的計算能力。通過阿里云自主研發(fā)的虛擬化2.0技術(shù),業(yè)務(wù)應(yīng)用可以直接訪問彈性裸金屬服務(wù)器的處理器和內(nèi)存,無任何虛擬化開銷。彈性裸金屬服務(wù)器具備物理機級別的完整處理器特性(例如Intel VT-x),以及物理機級別的資源隔離優(yōu)勢,特別適合上云部署傳統(tǒng)非虛擬化場景的應(yīng)用。
GPU 云服務(wù)器 EGS(Elastic GPU Service):GPU云服務(wù)器是基于GPU與CPU應(yīng)用的計算服務(wù)器。GPU在執(zhí)行復(fù)雜的數(shù)學(xué)和幾何計算方面有著獨特的優(yōu)勢,特別是在浮點運算、并行運算等方面,GPU可以提供上百倍于CPU的計算能力。GPU的功能特性如下:擁有大量擅長處理大規(guī)模并發(fā)計算的算術(shù)邏輯單元(Arithmetic and Logic Unit,即ALU) 、能夠支持多線程并行的高吞吐量運算、邏輯控制單元相對簡單。適用于視頻轉(zhuǎn)碼、圖片渲染、AI訓(xùn)練、AI推理、云端圖形工作站等場景。
超級計算集群 SCC(Super Computing Cluster):在彈性裸金屬服務(wù)器基礎(chǔ)上,加入高速RDMA(Remote Direct Memory Access)互聯(lián)支持,大幅提升網(wǎng)絡(luò)性能,提高大規(guī)模集群加速比。因此SCC在提供高帶寬、低延遲優(yōu)質(zhì)網(wǎng)絡(luò)的同時,還具備彈性裸金屬服務(wù)器的所有優(yōu)點。SCC主要用于高性能計算和人工智能、機器學(xué)習(xí)、科學(xué)計算、工程計算、數(shù)據(jù)分析、音視頻處理等場景。在集群內(nèi),各節(jié)點間通過RDMA網(wǎng)絡(luò)互聯(lián),提供高帶寬低延遲網(wǎng)絡(luò),保證了高性能計算和人工智能、機器學(xué)習(xí)等應(yīng)用的高度并行需求。同時,RoCE(RDMA over Convergent Ethernet)網(wǎng)絡(luò)速度達到InfiniBand網(wǎng)絡(luò)級的性能,且能支持更廣泛的基于Ethernet的應(yīng)用。
合理利用彈性資源
云上計算類產(chǎn)品提供靈活的彈性功能和策略,對無規(guī)律的業(yè)務(wù)量波動和有規(guī)律的業(yè)務(wù)量波動性能要求都能完成較好的適配。彈性資源的類型主要包括如下幾類:
彈性伸縮
彈性伸縮 ESS(Auto Scaling)是指根據(jù)業(yè)務(wù)需求和策略自動調(diào)整計算能力(即實例數(shù)量)的服務(wù)。可以指定實例的類型為ECS實例或ECI實例。彈性伸縮作為云上廣泛應(yīng)用的功能提供多種伸縮模式,包括固定數(shù)量模式、健康模式、定時模式、自定義模式和動態(tài)模式等,同時通過生命周期掛鉤和冷卻時間等特性給用戶提供充分的靈活性。
容器彈性伸縮
彈性是容器服務(wù) Kubernetes 版 ACK(Container Service for Kubernetes)被廣泛采用的功能,典型的場景包含在線業(yè)務(wù)彈性、大規(guī)模計算訓(xùn)練、深度學(xué)習(xí)GPU或共享GPU的訓(xùn)練與推理、定時周期性負載變化等。彈性伸縮分為兩個維度:
調(diào)度層彈性,主要是負責修改負載的調(diào)度容量變化。包括HPA、VPA、CronHPA和Elastic-Workload等類型,例如HPA是典型的調(diào)度層彈性組件,通過HPA可以調(diào)整應(yīng)用的副本數(shù),調(diào)整的副本數(shù)會改變當前負載占用的調(diào)度容量,從而實現(xiàn)調(diào)度層的伸縮。
資源層彈性,主要是集群的容量規(guī)劃不能滿足集群調(diào)度容量時,會通過彈出ECS或ECI等資源的方式進行調(diào)度容量的補充。包括cluster-autoscaler、virtual-node和virtual-kubelet-autoscaler等類型。
在實際應(yīng)用當中,建議兩者有機結(jié)合,同時,在高性能場景下,對容器的彈出速度提出了更高的要求。針對調(diào)度層彈性,可以通過ack-autoscaling-placeholder組件為集群的自動擴展提供緩沖區(qū)。針對資源層彈性,可以適用Alicloud Image Builder自動化構(gòu)建鏡像,再結(jié)合ACK集群節(jié)點池的自定義鏡像功能,快速地擴容節(jié)點。
函數(shù)計算
函數(shù)計算 FC(Function Compute)默認集成了彈性的屬性,按量模式根據(jù)函數(shù)的調(diào)用量自動進行實例擴縮容,在調(diào)用增加時創(chuàng)建實例,在請求減少后銷毀實例。整個過程中,通過請求自動觸發(fā)實例創(chuàng)建。如果實例在一段時間內(nèi)不處理請求,會自動銷毀。按量模式降低了管理應(yīng)用資源的難度,但也造成了冷啟動,延時等性能問題。
冷啟動是指在函數(shù)調(diào)用鏈路中的代碼下載、啟動函數(shù)實例容器、運行時初始化、代碼初始化等環(huán)節(jié)。當冷啟動完成后,函數(shù)實例就緒,后續(xù)請求就能直接被執(zhí)行。在追求高性能的場景下,往往需要相應(yīng)的解決方案消除冷啟動延時的影響。
冷啟動的優(yōu)化用戶和平臺配合完成。函數(shù)計算已經(jīng)對系統(tǒng)側(cè)的冷啟動做了大量優(yōu)化。對于用戶側(cè)的冷啟動,建議您從以下幾方面優(yōu)化:
精簡代碼包:開發(fā)者要盡量縮小代碼包。去掉不必要的依賴。例如,在Node.js中執(zhí)行npm prune命令,在Python中執(zhí)行autoflake 。另外,某些第三方庫中可能會包含測試用例源代碼,無用的二進制文件和數(shù)據(jù)文件等,刪除無用文件可以降低函數(shù)代碼下載和解壓時間。
選擇合適的函數(shù)語言:由于語言理念的差異,Java運行時冷啟動時間通常要高于其他語言。對于冷啟動延遲敏感的應(yīng)用,在熱啟動延遲差別不大的情況下,使用Python輕量語言可以大幅降低長尾延遲。
選擇合適的內(nèi)存:在并發(fā)量一定的情況下,函數(shù)內(nèi)存越大,分配的CPU資源相應(yīng)越多,因此冷啟動表現(xiàn)越優(yōu)。
降低冷啟動概率
使用定時觸發(fā)器預(yù)熱函數(shù)。
使用Initializer回調(diào),函數(shù)計算會異步調(diào)用初始化接口,消除掉代碼初始化的時間,在函數(shù)計算系統(tǒng)升級或者函數(shù)更新過程中,您對冷啟動無感知。
在實際應(yīng)用過程中,用戶側(cè)的冷啟動一般難以消除。例如,在深度學(xué)習(xí)推理中,要加載大量的模型文件時;函數(shù)要和遺留系統(tǒng)交互,必須使用初始化耗時很長的客戶端時。在這些場景下,如果函數(shù)對延時非常敏感,您可以為函數(shù)設(shè)置預(yù)留模式實例,或者在同一個函數(shù)里同時使用預(yù)留模式實例和按量模式實例。
預(yù)留模式實例的分配和釋放由您管理,根據(jù)實例的運行時長計費。當負載對資源的需求超過預(yù)留模式實例的能力后,系統(tǒng)自動使用按量模式實例,從而在性能和資源利用率上獲得平衡。通過預(yù)留模式實例,您能夠根據(jù)函數(shù)的負載變化提前分配好計算資源,系統(tǒng)能夠在擴容按量模式實例時仍然使用預(yù)留模式實例處理請求,從而徹底消除冷啟動帶來的延時。