Копирование данных TensorRT стоит много времени - PullRequest
0 голосов
/ 07 апреля 2020

Описание

Я конвертирую 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();

Интересно, могут ли приведенные выше коды сократить время передачи данных? Верны ли эти коды?

...