Download lib/python3.9/site-packages/caffe2/python/helpers/fc.py from camenduru/slahmr-test: direct link, hf CLI and curl.
- Browser
- Download file 6.41 kB
-
https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/caffe2/python/helpers/fc.py
- Command line
-
hf download hf://camenduru/slahmr-test/lib/python3.9/site-packages/caffe2/python/helpers/fc.py
-
curl -L -o fc.py https://huggingface.co/camenduru/slahmr-test/resolve/main/lib/python3.9/site-packages/caffe2/python/helpers/fc.py
6.41 kB
| ## @package fc | |
| # Module caffe2.python.helpers.fc | |
| from caffe2.python import core | |
| from caffe2.python.modeling import initializers | |
| from caffe2.python.modeling.parameter_info import ParameterTags | |
| def _FC_or_packed_FC( | |
| model, op_call, blob_in, blob_out, dim_in, dim_out, weight_init=None, | |
| bias_init=None, WeightInitializer=None, BiasInitializer=None, | |
| enable_tensor_core=False, float16_compute=False, **kwargs | |
| ): | |
| WeightInitializer = initializers.update_initializer( | |
| WeightInitializer, weight_init, ("XavierFill", {}) | |
| ) | |
| BiasInitializer = initializers.update_initializer( | |
| BiasInitializer, bias_init, ("ConstantFill", {}) | |
| ) | |
| if not model.init_params: | |
| WeightInitializer = initializers.ExternalInitializer() | |
| BiasInitializer = initializers.ExternalInitializer() | |
| blob_out = blob_out or model.net.NextName() | |
| bias_tags = [ParameterTags.BIAS] | |
| if 'freeze_bias' in kwargs: | |
| bias_tags.append(ParameterTags.COMPUTED_PARAM) | |
| weight = model.create_param( | |
| param_name=blob_out + '_w', | |
| shape=[dim_out, dim_in], | |
| initializer=WeightInitializer, | |
| tags=ParameterTags.WEIGHT | |
| ) | |
| bias = model.create_param( | |
| param_name=blob_out + '_b', | |
| shape=[dim_out, ], | |
| initializer=BiasInitializer, | |
| tags=bias_tags | |
| ) | |
| # enable TensorCore by setting appropriate engine | |
| if enable_tensor_core: | |
| kwargs['engine'] = 'TENSORCORE' | |
| # Enable float 16 compute kernel (relevant for CUDA) | |
| if float16_compute: | |
| kwargs['float16_compute'] = True | |
| return op_call([blob_in, weight, bias], blob_out, **kwargs) | |
| def fc(model, *args, **kwargs): | |
| return _FC_or_packed_FC(model, model.net.FC, *args, **kwargs) | |
| def packed_fc(model, *args, **kwargs): | |
| return _FC_or_packed_FC(model, model.net.PackedFC, *args, **kwargs) | |
| def fc_decomp( | |
| model, blob_in, blob_out, dim_in, dim_out, | |
| rank_approx=5, weight_init=None, bias_init=None, | |
| WeightInitializer=None, BiasInitializer=None, **kwargs | |
| ): | |
| """FC_Decomp version | |
| Here we assume that the rank of original input is bigger than 5. | |
| """ | |
| WeightInitializer = initializers.update_initializer( | |
| WeightInitializer, weight_init, ("XavierFill", {}) | |
| ) | |
| BiasInitializer = initializers.update_initializer( | |
| BiasInitializer, bias_init, ("ConstantFill", {}) | |
| ) | |
| blob_out = blob_out or model.net.NextName() | |
| u = model.create_param( | |
| param_name=blob_out + '_u', | |
| shape=[dim_out, rank_approx], | |
| initializer=WeightInitializer, | |
| ) | |
| v = model.create_param( | |
| param_name=blob_out + '_v', | |
| shape=[dim_in, rank_approx], | |
| initializer=WeightInitializer, | |
| ) | |
| bias = model.create_param( | |
| param_name=blob_out + '_b', | |
| shape=[dim_out, ], | |
| initializer=BiasInitializer, | |
| ) | |
| return model.net.FC_Decomp([blob_in, u, v, bias], blob_out, **kwargs) | |
| def fc_prune( | |
| model, blob_in, blob_out, dim_in, dim_out, | |
| weight_init=None, bias_init=None, mask_init=None, | |
| threshold=0.00001, need_compress_rate=False, | |
| comp_lb=0.05, | |
| **kwargs | |
| ): | |
| """FC_Prune version | |
| Runnable so far. Great!:) | |
| """ | |
| weight_init = weight_init if weight_init else ('XavierFill', {}) | |
| bias_init = bias_init if bias_init else ('ConstantFill', {}) | |
| mask_init = mask_init if mask_init else ('ConstantFill', {}) | |
| blob_out = blob_out or model.net.NextName() | |
| compress_rate = blob_out + '_compress_rate' | |
| if model.init_params: | |
| compress_lb = model.param_init_net.ConstantFill( | |
| [], | |
| blob_out + '_lb', | |
| shape=[1], | |
| value=comp_lb | |
| ) | |
| weight = model.param_init_net.__getattr__(weight_init[0])( | |
| [], | |
| blob_out + '_w', | |
| shape=[dim_out, dim_in], | |
| **weight_init[1] | |
| ) | |
| mask = model.param_init_net.ConstantFill( | |
| [], | |
| blob_out + '_m', | |
| shape=[dim_out, dim_in], | |
| value=1.0 | |
| ) | |
| ag_dw = model.param_init_net.__getattr__(mask_init[0])( | |
| [], | |
| blob_out + '_ag_dw', | |
| shape=[dim_out, dim_in], | |
| **mask_init[1] | |
| ) | |
| bias = model.param_init_net.__getattr__(bias_init[0])( | |
| [], | |
| blob_out + '_b', | |
| shape=[dim_out, ], | |
| **bias_init[1] | |
| ) | |
| mask_seq = model.param_init_net.__getattr__(mask_init[0])( | |
| [], | |
| blob_out + '_mask_seq', | |
| shape=[dim_out, dim_in], | |
| **mask_init[1] | |
| ) | |
| thres = model.param_init_net.ConstantFill( | |
| [], | |
| blob_out + '_thres', | |
| shape=[1], | |
| value=threshold | |
| ) | |
| else: | |
| compress_lb = core.ScopedBlobReference( | |
| blob_out + '_lb', model.param_init_net) | |
| weight = core.ScopedBlobReference( | |
| blob_out + '_w', model.param_init_net) | |
| bias = core.ScopedBlobReference( | |
| blob_out + '_b', model.param_init_net) | |
| mask = core.ScopedBlobReference( | |
| blob_out + '_m', model.param_init_net) | |
| ag_dw = core.ScopedBlobReference( | |
| blob_out + '_ag_dw', model.param_init_net) | |
| mask_seq = core.ScopedBlobReference( | |
| blob_out + '_mask_seq', model.param_init_net) | |
| thres = core.ScopedBlobReference( | |
| blob_out + '_thres', model.param_init_net) | |
| model.AddParameter(weight) | |
| model.AddParameter(bias) | |
| if need_compress_rate: | |
| return model.net.FC_Prune([blob_in, weight, mask, bias, ag_dw, mask_seq, | |
| thres, compress_lb], | |
| [blob_out, compress_rate], **kwargs) | |
| else: | |
| return model.net.FC_Prune([blob_in, weight, mask, | |
| bias, ag_dw, mask_seq, | |
| thres, compress_lb], | |
| blob_out, **kwargs) | |
| def fc_sparse( | |
| model, blob_in, blob_out, w_csr, iw, jw, bias, | |
| **kwargs | |
| ): | |
| """FC_Sparse: Only takes in allocated weights""" | |
| if not (w_csr and iw and jw and bias): | |
| print("Warning...") | |
| model.AddParameter(w_csr) | |
| model.AddParameter(iw) | |
| model.AddParameter(jw) | |
| model.AddParameter(bias) | |
| return model.net.FC_Sparse([blob_in, w_csr, iw, jw, bias], | |
| blob_out, **kwargs) | |