#python #machine-learning #pytorch
Вопрос:
Я в замешательстве по поводу того, можно ли запустить квантованную модель int8 на CUDA, или вы можете обучить квантованную модель только на CUDA с помощью fakequantise для развертывания на другом бэкэнде, таком как процессор.
Я хочу запустить модель на CUDA с реальными инструкциями int8 вместо поддельных инструкций float32 и наслаждаться повышением эффективности. Документы Pytorch странно неспецифичны в этом вопросе. Если возможно запустить квантованную модель на CUDA с другой структурой, например, TensorFlow
я хотел бы знать.
Это код для подготовки моей квантованной модели (с использованием квантования после обучения). Модель является обычной CNN с nn.Conv2d и nn.Модули LeakyReLU и nn.MaxPool:
model_fp = torch.load(models_dir net_file) model_to_quant = copy.deepcopy(model_fp) model_to_quant.eval() model_to_quant = quantize_fx.fuse_fx(model_to_quant) qconfig_dict = {"": torch.quantization.get_default_qconfig('qnnpack')} model_prepped = quantize_fx.prepare_fx(model_to_quant, qconfig_dict) model_prepped.eval() model_prepped.to(device='cuda:0') train_data = ImageDataset(img_dir, train_data_csv, 'cuda:0') train_loader = DataLoader(train_data, batch_size=32, shuffle=True, pin_memory=True) for i, (input, _) in enumerate(train_loader): if i gt; 1: break print('batch', i 1, end='r') input = input.to('cuda:0') model_prepped(input)
Это фактически квантовает модель:
model_quantised = quantize_fx.convert_fx(model_prepped) model_quantised.eval()
Это попытка запустить квантованную модель на CUDA и вызывает ошибку NotImplementedError, когда я запускаю ее на процессоре, она работает нормально:
model_quantised = model_quantised.to('cuda:0') for i, _ in train_loader: input = input.to('cuda:0') out = model_quantised(input) print(out, out.shape) break
В этом и заключается ошибка:
Traceback (most recent call last): File "/home/adam/Desktop/thesis/Ship Detector/quantisation.py", line 54, in lt;modulegt; out = model_quantised(input) File "/home/adam/.local/lib/python3.9/site-packages/torch/fx/graph_module.py", line 513, in wrapped_call raise e.with_traceback(None) NotImplementedError: Could not run 'quantized::conv2d.new' with arguments from the 'QuantizedCUDA' backend. This could be because the operator doesn't exist for this backend, or was omitted during the selective/custom build process (if using custom build). If you are a Facebook employee using PyTorch on mobile, please visit https://fburl.com/ptmfixes for possible resolutions. 'quantized::conv2d.new' is only available for these backends: [QuantizedCPU, BackendSelect, Named, ADInplaceOrView, AutogradOther, AutogradCPU, AutogradCUDA, AutogradXLA, UNKNOWN_TENSOR_TYPE_ID, AutogradMLC, Tracer, Autocast, Batched, VmapMode].