Я использую работника сельдерея для получения результатов от моих моделей обучения. Как передать большой кусок данных сельдерею
Что я делаю, это отправка больших массивов numpy (несколько мегабайт) из задачи клиента в сельдерей и обратно.
В настоящее время я сериализую в массивах numpy клиента как base64. Когда я храню/получаю данные непосредственно из/в Redis на клиенте или работнике сельдерея, производительность системы намного быстрее, чем /, когда я позволяю сельдерейу делать все прохождение аргументов (base64 of numpy).
Я хотел бы использовать сельдерей (с брокером 'redis') также для передачи массивов args/numpy и не перерисовывать непосредственно в клиенте. Вы знаете, где могут быть проблемы? Как я могу настроить конфигурацию сельдерея, чтобы сделать это более эффективно (выполнять передачу данных между клиентом-> брокер-> рабочим и обратно клиенту).
serialized = np.asarray(images).reshape((number_of_records, size)).ravel().tostring()
serialized = base64.b64encode(serialized)
#self.redis.set(key, serialized)
print('calling celery processor')
result = self.celery.send_task('process', args=[number_of_records, serialized], kwargs={})
returncode, result = result.get(timeout=1000, interval=0.1)
против (это быстрее, непосредственно использование хранения Redis):
serialized = np.asarray(images).reshape((number_of_records, size)).ravel().tostring()
serialized = base64.b64encode(serialized)
self.redis.set(key, serialized)
print('calling celery processor')
result = self.celery.send_task('process', args=[number_of_records, key], kwargs={})
returncode, result = result.get(timeout=1000, interval=0.1)
resultc= self.redis.get(key)
Любые советы для выполнения сельдерея для сериализации, настройки конфигурации, ...? Я бы хотел, чтобы эта система была быстрой и простой. Должен ли я действительно использовать redis напрямую, как во втором примере?
Вы решили эту проблему? – luanbuingoc