MCPcopy Create free account
hub / github.com/Oneflow-Inc/oneflow / offload

Method offload

oneflow/core/framework/tensor.cpp:167–191  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

165 }
166
167Maybe<void> LocalTensor::offload() {
168 TENSOR_OFFLOAD_CHECK(false, "offloaded");
169
170 // Offload to cpu mem with a cpu tensor implantation.
171 int64_t device_id = JUST(this->device())->device_id();
172 std::shared_ptr<Tensor> cuda_tensor = shared_from_this();
173 auto offloaded_tensor =
174 JUST(functional::Copy(cuda_tensor, "cpu", device_id, /*pin_memory=*/JUST(is_pinned())));
175 JUST(vm::CurrentRankSync());
176
177 const auto& detached_tensor =
178 std::dynamic_pointer_cast<LocalTensor>(JUST(offloaded_tensor->detach()));
179 CHECK_NOTNULL_OR_RETURN(detached_tensor) << " detached_tensor must be a local tensor.";
180 offloaded_impl_ = detached_tensor->impl_;
181
182 // Release cuda memory, but the meta data is valid.
183 auto eager_blob_obj = JUST(JUST(impl_->mut_eager_local_tensor_impl())->eager_blob_object());
184 JUST(eager_blob_obj->DeallocateBlobDataPtr());
185
186 auto* vm = JUST(SingletonMaybe<VirtualMachine>());
187 JUST(vm->ShrinkAllMem());
188
189 is_offloaded_ = true;
190 return Maybe<void>::Ok();
191}
192
193Maybe<void> LocalTensor::load() {
194 TENSOR_OFFLOAD_CHECK(true, "loaded");

Calls 11

deviceMethod · 0.95
CopyClass · 0.85
CurrentRankSyncFunction · 0.85
ClusterSyncFunction · 0.85
DeallocateBlobDataPtrMethod · 0.80
ShrinkAllMemMethod · 0.80
device_idMethod · 0.45
detachMethod · 0.45
eager_blob_objectMethod · 0.45
cur_rank_phy_tensorMethod · 0.45