Описание
Я конвертирую resNet v1_50 model
в tenorRT и запускаю с точностью INT8. Если batch_size
равно 16
, то логическое устройство стоит 10,73 мс / партия, однако add copyInputToDevice()
и copyOutputToHost()
, оно стоит 14,88 мс / партия, а модель TF-TRT стоит 13,08 мс / партия (передача данных внутри). Я также попробовал copyInputToDeviceAsync()
и copyOutputToHostAsync()
и запустил модель с context->enqueue()
, однако затраты времени не уменьшаются. Есть ли способ сократить время передачи данных? Спасибо большое!
Среда
Версия TensorRT: 7.0
Тип графического процессора: T4
Версия драйвера Nvidia: 410.79
Версия CUDA: 10.0
CUDNN Версия: 7.6.4
Операционная система + Версия: Centos 7
Python Версия (если применимо): 2.7
Версия TensorFlow (если применимо): 1.15
Код
const auto t_start = std::chrono::high_resolution_clock::now();
// Create CUDA stream for the execution of this inference
cudaStream_t stream;
CHECK(cudaStreamCreate(&stream));
// Asynchronously copy data from host input buffers to device input buffers
buffers.copyInputToDeviceAsync(stream);
// Asynchronously enqueue the inference work
if (!context->enqueue(mParams.batchSize, buffers.getDeviceBindings().data(), stream, nullptr))
{
return false;
}
// Asynchronously copy data from device output buffers to host output buffers
buffers.copyOutputToHostAsync(stream);
// Wait for the work in the stream to complete
cudaStreamSynchronize(stream);
// Release stream
cudaStreamDestroy(stream);
const auto t_end = std::chrono::high_resolution_clock::now();
Интересно, могут ли приведенные выше коды сократить время передачи данных? Верны ли эти коды?