@@ -190,9 +190,9 @@ void cascade_force_moe_consumers(
190190// ---- Phase 2 Graph Deep-Copy ----
191191
192192void phase2_graph_cache::release () {
193- if (persistent_gf) { delete[] (char *)persistent_gf; persistent_gf = nullptr ; }
194- if (persistent_ctx) { ggml_free (persistent_ctx); persistent_ctx = nullptr ; }
193+ for (auto * t : persistent_tensors) delete t;
195194 persistent_tensors.clear ();
195+ if (persistent_gf) { delete[] (char *)persistent_gf; persistent_gf = nullptr ; }
196196 valid = false ;
197197}
198198
@@ -206,28 +206,12 @@ void deep_copy_phase2_graph(
206206 int n_leafs = ggml_graph_n_leafs (src_gf);
207207 int total_t = n_nodes + n_leafs;
208208
209- const size_t tensor_bytes = (size_t )total_t * 1024 ;
210- struct ggml_init_params params = { tensor_bytes, nullptr , true };
211- cache.persistent_ctx = ggml_init (params);
212- if (!cache.persistent_ctx ) {
213- fprintf (stderr, " deep_copy_phase2_graph: ggml_init(%zu) failed\n " , tensor_bytes);
214- return ;
215- }
216-
217209 std::unordered_map<const ggml_tensor *, ggml_tensor *> map;
218210
219211 auto dup_tensor = [&](const ggml_tensor * src) -> ggml_tensor * {
220- auto * dst = ggml_dup_tensor (cache.persistent_ctx , src);
221- if (!dst) return nullptr ;
222- strncpy (dst->name , src->name , GGML_MAX_NAME - 1 );
223- dst->name [GGML_MAX_NAME - 1 ] = ' \0 ' ;
224- dst->op = src->op ;
225- dst->data = src->data ;
226- dst->flags = src->flags ;
227- dst->view_offs = src->view_offs ;
228- dst->extra = src->extra ;
229- memcpy (dst->op_params , src->op_params , sizeof (dst->op_params ));
230- for (int d = 0 ; d < GGML_MAX_DIMS ; d++) dst->nb [d] = src->nb [d];
212+ auto * dst = new ggml_tensor (*src);
213+ for (int s = 0 ; s < GGML_MAX_SRC ; s++) dst->src [s] = src->src [s];
214+ dst->view_src = src->view_src ;
231215 map[src] = dst;
232216 cache.persistent_tensors .push_back (dst);
233217 return dst;
@@ -257,11 +241,8 @@ void deep_copy_phase2_graph(
257241 cache.persistent_gf ->n_leafs = 0 ;
258242 cache.persistent_gf ->nodes = (ggml_tensor **)(buf + sizeof (ggml_cgraph));
259243 cache.persistent_gf ->leafs = cache.persistent_gf ->nodes + total_t ;
260- cache.persistent_gf ->grads = nullptr ;
261- cache.persistent_gf ->grad_accs = nullptr ;
262- cache.persistent_gf ->use_counts = nullptr ;
263- cache.persistent_gf ->order = GGML_CGRAPH_EVAL_ORDER_LEFT_TO_RIGHT ;
264- cache.persistent_gf ->uid = 0 ;
244+ cache.persistent_gf ->order = src_gf->order ;
245+ cache.persistent_gf ->uid = 0 ;
265246
266247 for (int i = 0 ; i < n_leafs; i++) {
267248 auto it = map.find (ggml_graph_leaf (src_gf, i));
@@ -273,8 +254,7 @@ void deep_copy_phase2_graph(
273254 }
274255
275256 cache.valid = true ;
276- fprintf (stderr, " deep_copy_phase2_graph: copied %d nodes + %d leafs (%zu KB ctx, %zu B graph)\n " ,
277- n_nodes, n_leafs, tensor_bytes / 1024 , graph_bytes);
257+ fprintf (stderr, " deep_copy_phase2_graph: copied %d nodes + %d leafs\n " , n_nodes, n_leafs);
278258}
279259
280260} // namespace moe
0 commit comments