检查点序列化过程-2
save(k)
- save_str
- obj:’model_state_dict’
- n:16
- data:b’X\x10\x00\x00\x00model_state_dict’
- self.memoize(obj)
- idx:1 obj:’model_state_dict’
- id(obj):131443899919424
save(v)
- t:collections.OrderedDict
- f:None
- 检查一个可能存在的“私有分发表”(dispatch table),找不到
- 是否是 Python 的类类型(type)
- reduce_ex 方法存在,rv = reduce(self.proto)
- rv = reduce(self.proto):调用 reduce_ex 方法,并将返回值存储在 rv 中。
- rv是一个元祖tuple
- l = len(rv)
- 5
- 最终调用save_reduce
save_reduce
- func:<class ‘collections.OrderedDict’>
- args:() rv,tuple
- save(func)
save(func)
- save(type)
| 1 |  | 
- self.save_global(obj) 
- obj/obj2:<class ‘collections.OrderedDict’> 
- name/lastname:’OrderedDict’ 
- module_name:’collections’ 
- parent/module:import(module_name, level=0):<module ‘collections’ from ‘/home/dell/anaconda3/envs/torch_new_env/lib/python3.11/collections/__init__.py’> 
- write(data):b’ccollections\nOrderedDict\n’ 
- memo(idx(2)):b’q\x02’ 
save(args)
- save_tuple(self, obj)
- obj:()1 
 2
 3
 4
 5
 6
 7def save_tuple(self, obj):
 if not obj: # tuple is empty
 if self.bin:
 self.write(EMPTY_TUPLE)
 else:
 self.write(MARK + TUPLE)
 return
- tuple是空,write(EMPTY_TUPLE):b’)’
- write(REDUCE):b’R’
memo(obj)
- memo(idx(3)):b’q\x03’
- id(obj):132101266175680
- _batch_setitems
n=7 _batch_setitems
save(k)
- write(MARK):b’(‘
- save_str(embedding.weight)
- write(b’X\x10\x00\x00\x00embedding.weight’)
- memo(b’q\x04’)
save(v)
- rv = reduce(self.proto),看起来像TypedStorage1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13-2.759326696395874
 -0.4928496479988098
 -0.9460598826408386
 0.12430991232395172
 -0.8162614107131958
 -0.46302852034568787
 2.887676239013672
 0.2881816625595093
 -0.3105534017086029
 -0.1721319556236267
 1.5114414691925049
 0.6535921096801758
 [torch.storage.TypedStorage(dtype=torch.float32, device=cpu) of size 10000], 0, (10000, 1), (1, 1), False, OrderedDict()))
- save_reduce()
- save(func):<function _rebuild_tensor_v2 at 0x7825cb0ff060>
- save(args) args看起来就是rv
- obj1 
 2
 3
 4
 5
 6
 7tensor([[ 1.1894],
 [-0.5411],
 [-2.4535],
 ...,
 [-0.1721],
 [ 1.5114],
 [ 0.6536]])
save(func)
- save_global
- name:’_rebuild_tensor_v2’
- module_name:’torch._utils’
- write(b’ctorch._utils\n_rebuild_tensor_v2\n_rebuild_tensor_v2\n’)
- memo(b’q\x05’)
save(args)
- save_tuple
- write(MARK):b’(‘
- save(element)
persistent_id
| 1 |  | 
- storage_dtype:torch.float32
- storage_type_str:’FloatStorage’
- storage_type:<class ‘torch.FloatStorage’>
- storage_numel:10000
- storage_key=01 
 2
 3
 4
 5def save_pers(self, pid):
 # Save a persistent id reference
 if self.bin:
 self.save(pid, save_persistent_id=False)
 self.write(BINPERSID)
检查点序列化过程-2
      http://sjx.com/2024/12/11/检查点序列化过程-2/