本技術涉及gpu的,尤其是涉及一種應用于gpu算力調度的應用快速切換方法及系統(tǒng)。
背景技術:
1、目前,對于在ai應用主要的工作負載包括ai程序的吞吐量密集型訓練任務和延遲敏感的推理任務,主流做法是分別為訓練和推理提供專用的gpu集群。但在大模型架構中,推理任務和訓練任務均難以使用訓練集群來服務。
2、參照圖1,ai程序的任務運行包括任務準備、任務執(zhí)行以及任務清洗三個階段,由于gpu在新任務和舊任務之間切換時有很高的開銷,現(xiàn)在的切換方式是秒級,而大部分推理任務具有嚴格的服務指標(slos),需要控制在數(shù)十到數(shù)百毫秒的范圍內,因此切換效率低下,難以將多個深度練習(dl)程序打包到同一gpu服務器上。
3、現(xiàn)有的解決方案是讓多個不同的模型在空間上共享gpu顯存,包括圖2所示的nvidia多進程共享(mps),mps的方式是提前準備每個模型的任務,即新舊任務均先準備,其切換速度快,但問題在于多個模型占據很大的顯存空間,導致gpu整理利用率變低,因此需要改進。
技術實現(xiàn)思路
1、為了減小ai程序在gpu上運行的任務切換開銷,且提升gpu的利用率,本技術提供了一種應用于gpu算力調度的應用快速切換方法及系統(tǒng)。
2、本技術的上述發(fā)明目的一是通過以下技術方案得以實現(xiàn)的:
3、一種應用于gpu算力調度的應用快速切換方法,包括步驟:
4、將ai程序在gpu上運行的一個任務劃分為若干執(zhí)行子任務,并基于預設的準備規(guī)則,將任務準備階段劃分出第一準備階段和第二準備階段;
5、基于預設的運行規(guī)則,在當前任務的任務準備階段過程中,運行下一個任務的第一準備階段;
6、在當前任務的任務執(zhí)行階段達到預設進程時,運行下一個任務中第一個所述執(zhí)行子任務的第二準備階段;
7、當下一個任務中第一個所述執(zhí)行子任務的第二準備階段運行結束后,運行第一個所述執(zhí)行子任務;
8、在第一個所述執(zhí)行子任務運行過程中,運行下一個執(zhí)行子任務的第二準備階段,同時運行任務清洗階段以清除已完成運行的任務;
9、當所有執(zhí)行子任務運行完成后,運行任務清洗階段。
10、通過采用上述技術方案,為了有效地分時gpu,最小化任務切換的開銷,通過將ai程序在gpu上運行的任務劃分為多個執(zhí)行子任務,并將任務準備階段進行劃分,在當前任務準備的過程中,即開始下一個任務的第一準備階段,即舊任務開始時,先開始部分新任務的準備,并將執(zhí)行子任務的第二準備階段與上一個任務的執(zhí)行同時運行,且在執(zhí)行子任務運行后即運行任務清洗階段,保持gpu上有足夠的顯存去準備和運行每個執(zhí)行子任務,同時也提升了利用率;因此,上述通過流水線式的任務上下文切換設置,統(tǒng)一了顯存管理和主備工作分子任務運行,大大降低了切換開銷,提升gpu的利用率。
11、可選的,所述并基于預設的準備規(guī)則,將任務準備階段劃分出第一準備階段和第二準備階段,包括:
12、所述第一準備階段包括環(huán)境初始化階段,所述環(huán)境初始化階段用于進程啟動以及pytorch?cuda運行時的加載和cuda上下文初始化;
13、所述第二準備階段包括顯存分配階段和數(shù)據傳輸階段,所述顯存分配階段用于為ai程序中的執(zhí)行子任務申請匹配的顯存,且所述ai程序保存于預設的主機內存中;
14、所述數(shù)據傳輸階段用于將ai程序模型的模型數(shù)據和需要在gup上運行的任務從主機內存中拷貝至顯存中。
15、通過采用上述技術方案,由于環(huán)境初始化階段中只進行運行時夾在和cuda的上下文初始化,因此運行所占用的顯存小,可以對多個任務或執(zhí)行子任務進行初始化工作,提升gpu利用率。
16、可選的,所述基于預設的運行規(guī)則,在當前任務的任務準備階段過程中,運行下一個任務的第一準備階段;包括:
17、基于預設的運行規(guī)則,在當前任務開始運行環(huán)境初始化階段時,同步運行下一個任務的環(huán)境初始化階段;
18、當同步運行環(huán)境初始化階段的所有任務占用的顯存達到第一預設值,暫停運行新的任務的環(huán)境初始化階段;
19、在任務清洗階段的運行后,同步運行環(huán)境初始化階段的所有任務占用的顯存再次小于第一預設值時,重新運行下一個任務的環(huán)境初始化階段。
20、通過采用上述技術方案,考慮顯存大小的影響,對于每個任務的環(huán)境初始化階段的提前準備,也需要控制其數(shù)量,因此設置第一預設值,當進行環(huán)境初始化準備的任務或執(zhí)行子任務所占用的顯存達到第一預設值時,則先暫停環(huán)境初始化階段的提前準備,待任務清洗階段進行顯存釋放后再次進行環(huán)境初始化的提前準備,是現(xiàn)在保持gpu高利用率的情況下減少切換開銷的時間。
21、可選的,所述在當前任務的任務執(zhí)行階段達到預設進程時,運行下一個任務中第一個所述執(zhí)行子任務的第二準備階段;包括:
22、獲取當前任務中執(zhí)行子任務的個數(shù),并識別未運行的執(zhí)行子任務的數(shù)量信息;
23、當數(shù)量信息小于預設數(shù)量時,獲取所有未運行的執(zhí)行子任務各自對應的顯存申請信息;
24、基于顯存申請信息,當任一所述未運行的執(zhí)行子任務所申請的顯存大于第二預設值時,將該條未運行的執(zhí)行子任務進行標記;
25、當被標記的執(zhí)行子任務運行完成時,運行下一個任務中第一個所述執(zhí)行子任務的第二準備階段。
26、通過采用上述技術方案,為了在保持gpu高利用率的前提下,滿足低開銷的任務切換,對于第二準備階段的運行,即顯存分配階段和數(shù)據傳輸階段的運行設置,需要對當前未完成運行的執(zhí)行子任務進行數(shù)量識別和顯存識別,若當前未運行的執(zhí)行子任務仍較多時,則先不運行下一個任務中執(zhí)行子任務的第二準備階段,當前未運行的執(zhí)行子任務小于預設數(shù)量后,還需要對未運行的執(zhí)行子任務進行顯存識別,若其顯存大于第二預設值,則將該執(zhí)行子任務進行標記,并判定仍存在切換開銷大的風險,因此等待被標記的執(zhí)行子任務運行完成后,再運行下一個執(zhí)行子任務的第二準備階段,能夠降低上下文切換的開銷。
27、可選的,所述當下一個任務中第一個所述執(zhí)行子任務的第二準備階段運行結束后,運行第一個所述執(zhí)行子任務;包括:
28、當下一個任務中第一個所述執(zhí)行子任務的第二準備階段運行結束時,判斷當前任務的任務執(zhí)行階段是否結束運行;
29、若當前任務的任務執(zhí)行階段結束,則立即運行第一個所述執(zhí)行子任務;
30、若當前任務的任務執(zhí)行階段未結束,則判斷當前所運行的執(zhí)行子任務與即將運行的第一個所述執(zhí)行子任務所申請的顯存之和是否超過第二預設值,若是,則待當前任務的任務執(zhí)行階段結束時,運行第一個所述執(zhí)行子任務。
31、通過采用上述技術方案,當執(zhí)行子任務的第二準備階段完成后,即完成顯存申請和數(shù)據拷貝后,仍需要判定是否能夠立即運行當前的執(zhí)行子任務,以降低上下文切換的開銷,因此,第二準備階段完成后,需要判斷當前剩下未完成運行的部分執(zhí)行子任務與即將要運行的執(zhí)行子任務相加的顯存是否超過第二預設值,進行選擇性地判斷下一個執(zhí)行子任務是立即運行還是延遲運行,做到在每個運行環(huán)節(jié)都能夠有效降低上下文切換的開銷。
32、可選的,所述顯存分配階段用于為ai程序中的執(zhí)行子任務申請匹配的顯存,包括:
33、獲取待執(zhí)行ai程序中所有的執(zhí)行子任務,并將執(zhí)行子任務依次輸入預完成訓練的顯存匹配模型;
34、當顯存匹配模型接收到執(zhí)行子任務時,識別執(zhí)行子任務所屬任務的類型信息和任務劃分信息;
35、基于類型信息和任務劃分信息,為當前執(zhí)行子任務匹配對應的顯存申請值;且在當前執(zhí)行子任務的顯存分配階段運行時,基于顯存申請值生成并發(fā)送顯存申請指令。
36、通過采用上述技術方案,為了提高ai程序中每個執(zhí)行子任務顯存申請階段的效率,通過預設的顯存匹配模型,識別該任務的類型以及該任務劃分的情況,能夠準確地為每一個即將要運行的任務或執(zhí)行子任務提前匹配到所需要的顯存大小,提示第二準備階段的效率。
37、可選的,所述基于類型信息和任務劃分信息,為當前執(zhí)行子任務匹配對應的顯存申請值;包括:
38、基于類型信息,從顯存匹配模型的預設數(shù)據庫中篩選出與該任務的類型對應的顯存區(qū)間;
39、基于任務劃分信息識別當前執(zhí)行子任務所屬任務的任務劃分數(shù)量,從顯存區(qū)間中篩選出與該任務劃分數(shù)量匹配的顯存,作為當前執(zhí)行子任務的顯存申請值。
40、通過采用上述技術方案,為了進一步提升顯存匹配的效率,通過任務的類型信息能夠先快速地確定大致的顯存匹配區(qū)間,再通過任務劃分信息識別到當前的任務被劃分為多少個執(zhí)行子任務,進行能夠在已經篩選出的顯存區(qū)間內快速地匹配到需要的顯存申請值。
41、本技術的上述發(fā)明目的二是通過以下技術方案得以實現(xiàn)的:
42、一種應用于gpu算力調度的應用快速切換系統(tǒng),包括:
43、劃分模塊,用于將ai程序在gpu上運行的一個任務劃分為若干執(zhí)行子任務,并基于預設的準備規(guī)則,將任務準備階段劃分出第一準備階段和第二準備階段;
44、第一運行模塊,用于基于預設的運行規(guī)則,在當前任務的任務準備階段過程中,運行下一個任務的第一準備階段;
45、第二運行模塊,用于在當前任務的任務執(zhí)行階段達到預設進程時,運行下一個任務中第一個所述執(zhí)行子任務的第二準備階段;
46、第三運行模塊,用于當下一個任務中第一個所述執(zhí)行子任務的第二準備階段運行結束后,運行第一個所述執(zhí)行子任務;
47、第四運行模塊,用于在第一個所述執(zhí)行子任務運行過程中,運行下一個執(zhí)行子任務的第二準備階段,同時運行任務清洗階段以清除已完成運行的任務;
48、第五運行模塊,用于當所有執(zhí)行子任務運行完成后,運行任務清洗階段。
49、本技術的上述目的三是通過以下技術方案得以實現(xiàn)的:
50、一種計算機設備,包括存儲器、處理器以及存儲在所述存儲器中并可在所述處理器上運行的計算機程序,所述處理器執(zhí)行所述計算機程序時實現(xiàn)上述一種應用于gpu算力調度的應用快速切換方法的步驟。
51、本技術的上述目的四是通過以下技術方案得以實現(xiàn)的:
52、一種計算機可讀存儲介質,所述計算機可讀存儲介質存儲有計算機程序,所述計算機程序被處理器執(zhí)行時實現(xiàn)上述一種應用于gpu算力調度的應用快速切換方法的步驟。
53、綜上所述,本技術包括以下至少有益技術效果:
54、1.在當前任務準備的過程中,即開始下一個任務的第一準備階段,即舊任務開始時,先開始部分新任務的準備,并將執(zhí)行子任務的第二準備階段與上一個任務的執(zhí)行同時運行,且在執(zhí)行子任務運行后即運行任務清洗階段,保持gpu上有足夠的顯存去準備和運行每個執(zhí)行子任務,同時也提升了利用率;因此,上述通過流水線式的任務上下文切換設置,統(tǒng)一了顯存管理和主備工作分子任務運行,大大降低了切換開銷,提升gpu的利用率;
55、2.由于環(huán)境初始化階段中只進行運行時夾在和cuda的上下文初始化,因此運行所占用的顯存小,可以對多個任務或執(zhí)行子任務進行初始化工作,提升gpu利用率;
56、3.考慮顯存大小的影響,對于每個任務的環(huán)境初始化階段的提前準備,也需要控制其數(shù)量,因此設置第一預設值,當進行環(huán)境初始化準備的任務或執(zhí)行子任務所占用的顯存達到第一預設值時,則先暫停環(huán)境初始化階段的提前準備,待任務清洗階段進行顯存釋放后再次進行環(huán)境初始化的提前準備,是現(xiàn)在保持gpu高利用率的情況下減少切換開銷的時間;
57、4.為了提高ai程序中每個執(zhí)行子任務顯存申請階段的效率,通過預設的顯存匹配模型,識別該任務的類型以及該任務劃分的情況,能夠準確地為每一個即將要運行的任務或執(zhí)行子任務提前匹配到所需要的顯存大小,提示第二準備階段的效率。