Coverage for streamwise/model_provisioner/policies.py: 100%

23 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-09 04:47 +0000

1from __future__ import annotations 

2 

3from sim_types import Objective 

4from sim_types import Policy 

5from sim_types import GPUType 

6from sim_types import Model 

7from sim_types import Solver 

8 

9from constants import GPU_RESERVED_COST 

10from constants import GPU_SPOT_COST 

11 

12 

13# Max devices for each model 

14# the logic is to allocate devices to each model proportional to their max devices 

15MAX_DEVICES = { 

16 Model.GEMMA: 8, 

17 Model.FLUX: 16, 

18 Model.HF: 40, 

19 Model.HF_VAE: 1, 

20 Model.FT: 40, 

21 Model.FT_VAE: 1, 

22} 

23 

24# Max iterations for the optimization loop to prevent infinite loops in case of non-monotonic allocators or other issues 

25MAX_ITERATIONS = 100 

26 

27# Set to True if we want to use up all GPUs if there's no further improvements in the greedy optimization loop 

28USE_ALL_GPUS = True 

29 

30# Default StreamWise policy configuration 

31# TODO: Add a meta policy that picks the best among disaggregation options for HF/FT 

32STREAMWISE_POLICY = Policy( 

33 name="streamwise", 

34 gpu_cost=GPU_SPOT_COST, 

35 objective=Objective.TTFF_COST, 

36 disaggregation={ 

37 Model.HF: True, 

38 Model.FT: False, 

39 }, 

40 use_upscaler=True, 

41 hardware=list(GPUType), 

42) 

43 

44STREAMWISE_MILP_POLICY = Policy( 

45 name="streamwise", 

46 gpu_cost=GPU_SPOT_COST, 

47 objective=Objective.TTFF_COST, 

48 disaggregation={ 

49 Model.HF: True, 

50 Model.FT: False, 

51 }, 

52 use_upscaler=True, 

53 hardware=list(GPUType), 

54 solver=Solver.GUROBI, 

55) 

56 

57 

58""" 

59HexGen policy configuration. 

60""" 

61HEXGEN_POLICY = Policy( 

62 name="hexgen", 

63 gpu_cost=GPU_RESERVED_COST, 

64 objective=Objective.TTFF, # Does not account for cost 

65 disaggregation={ 

66 Model.HF: True, 

67 Model.FT: False, 

68 }, # Dissagregation 

69 use_upscaler=False, 

70 hardware=[ # Multiple hardware 

71 GPUType.A100, 

72 GPUType.H100, 

73 GPUType.H200, 

74 GPUType.GB200, 

75 ], 

76 solver=Solver.HEXGEN, 

77) 

78 

79 

80""" 

81Helix policy configuration. 

82Reference: https://github.com/Thesys-lab/Helix-ASPLOS25 

83Optimizes models one-by-one following MODEL_ORDER using MILP. 

84""" 

85HELIX_POLICY = Policy( 

86 name="helix", 

87 gpu_cost=GPU_RESERVED_COST, 

88 objective=Objective.TTFF, # Does not account for cost 

89 disaggregation={ 

90 Model.HF: True, 

91 Model.FT: False, 

92 }, 

93 use_upscaler=False, 

94 hardware=list(GPUType), 

95 solver=Solver.HELIX, 

96) 

97 

98 

99""" 

100DDiT policy configuration. 

101Reference: https://arxiv.org/html/2506.13497v1 

102""" 

103DDIT_POLICY = Policy( 

104 name="ddit", 

105 gpu_cost=GPU_RESERVED_COST, 

106 objective=Objective.TTFF, 

107 disaggregation={ 

108 Model.HF: True, 

109 Model.FT: False, 

110 }, 

111 use_upscaler=False, 

112 hardware=list(GPUType), 

113 solver=Solver.NAIVE, 

114) 

115 

116 

117STREAMWISE_ENERGY_POLICY = Policy( 

118 name="streamwise energy", 

119 gpu_cost=GPU_SPOT_COST, 

120 objective=Objective.TIME_ENERGY, 

121 disaggregation={ 

122 Model.HF: True, 

123 Model.FT: False, 

124 }, 

125 use_upscaler=True, 

126 hardware=list(GPUType), 

127) 

128 

129NAIVE_POLICY = Policy( 

130 name="naive", 

131 gpu_cost=GPU_RESERVED_COST, 

132 objective=Objective.TTFF, 

133 disaggregation={}, 

134 use_upscaler=False, 

135 hardware=[GPUType.A100], 

136 solver=Solver.NAIVE, 

137) 

138 

139 

140BASELINE_POLICIES = { 

141 "naive": NAIVE_POLICY, 

142 "naive disag": Policy( 

143 "naive disag", 

144 gpu_cost=GPU_RESERVED_COST, 

145 objective=Objective.TTFF, 

146 disaggregation={ 

147 Model.HF: True, 

148 Model.FT: True, 

149 }, 

150 use_upscaler=False, 

151 hardware=[GPUType.A100], 

152 solver=Solver.NAIVE, 

153 ), 

154 "naive upscaler": Policy( 

155 "naive upscaler", 

156 gpu_cost=GPU_RESERVED_COST, 

157 objective=Objective.TTFF, 

158 disaggregation={}, 

159 use_upscaler=True, # Changed to True 

160 hardware=[GPUType.A100], 

161 solver=Solver.NAIVE, 

162 ), 

163 "naive spot": Policy( 

164 "naive spot", 

165 gpu_cost=GPU_SPOT_COST, # Changed to SPOT_COST 

166 objective=Objective.TTFF, 

167 disaggregation={}, 

168 use_upscaler=False, 

169 hardware=[GPUType.A100], 

170 solver=Solver.NAIVE, 

171 ), 

172 "naive ttff*cost allocator": Policy( 

173 "naive ttff*cost allocator", 

174 GPU_RESERVED_COST, 

175 objective=Objective.TTFF_COST, # Changed to TTFF_COST 

176 disaggregation={}, 

177 use_upscaler=False, 

178 hardware=[GPUType.A100], 

179 solver=Solver.GREEDY, 

180 ), 

181 "naive hardware": Policy( 

182 "naive hardware", 

183 GPU_RESERVED_COST, 

184 objective=Objective.TTFF, 

185 disaggregation={}, 

186 use_upscaler=False, 

187 hardware=list(GPUType), # Changed hardware 

188 solver=Solver.NAIVE, 

189 ), 

190} 

191 

192 

193STREAMWISE_POLICIES = { 

194 "streamwise": STREAMWISE_POLICY, 

195 "streamwise no disag": Policy( 

196 name="streamwise no disag", 

197 gpu_cost=GPU_SPOT_COST, 

198 objective=Objective.TTFF_COST, 

199 disaggregation={}, 

200 use_upscaler=True, 

201 hardware=list(GPUType), 

202 solver=Solver.GREEDY, 

203 ), 

204 "streamwise no upscaler": Policy( 

205 name="streamwise no upscaler", 

206 gpu_cost=GPU_SPOT_COST, 

207 objective=Objective.TTFF_COST, 

208 disaggregation={ 

209 Model.HF: True, 

210 Model.FT: False, 

211 }, 

212 use_upscaler=False, 

213 hardware=list(GPUType), 

214 solver=Solver.GREEDY, 

215 ), 

216 "streamwise no spot": Policy( 

217 name="streamwise no spot", 

218 gpu_cost=GPU_RESERVED_COST, 

219 objective=Objective.TTFF_COST, 

220 disaggregation={ 

221 Model.HF: True, 

222 Model.FT: False, 

223 }, 

224 use_upscaler=True, 

225 hardware=list(GPUType), 

226 solver=Solver.GREEDY, 

227 ), 

228 "streamwise naive allocator": Policy( 

229 name="streamwise naive allocator", 

230 gpu_cost=GPU_SPOT_COST, 

231 objective=Objective.TTFF, 

232 disaggregation={ 

233 Model.HF: True, 

234 Model.FT: False, 

235 }, 

236 use_upscaler=True, 

237 hardware=list(GPUType), 

238 solver=Solver.NAIVE, 

239 ), 

240 "streamwise A100": Policy( 

241 name="streamwise single hardware", 

242 gpu_cost=GPU_SPOT_COST, 

243 objective=Objective.TTFF_COST, 

244 disaggregation={ 

245 Model.HF: True, 

246 Model.FT: False, 

247 }, 

248 use_upscaler=True, 

249 hardware=[GPUType.A100], 

250 solver=Solver.NAIVE, 

251 ), 

252}