На моем MacBook Pro M2 (32 ГБ ОЗУ) код выполняется значительно быстрее по сравнению с экземплярами AWS EC2, включая как процессор (c7i.8xlarge), так и графический процессор (g5.2xlarge).
В частности, вызов window_to_image_filter.Update() примерно в 100 раз медленнее облачные машины. Я подозреваю, что это как-то связано с повреждением экрана.
Код: Выделить всё
Class MyRenderer:
def __init__(self, mesh: trimesh.Trimesh):
self.vtkmesh = create_vtk_mesh(mesh.vertices, mesh.faces) # This returns vtkPolyData mesh
self.renderer = vtk.vtkRenderer()
self.render_window = vtk.vtkRenderWindow()
self.render_window.AddRenderer(self.renderer)
self.render_window.SetOffScreenRendering(False)
self.render_window.SetSize(128, 128)
mapper = vtk.vtkPolyDataMapper()
mapper.SetInputData(self.vtkmesh)
actor = vtk.vtkActor()
actor.SetMapper(mapper)
self.renderer.AddActor(actor)
self.camera = vtk.vtkCamera()
self.camera.ParallelProjectionOn()
self.camera.SetParallelScale(75)
self.camera.SetClippingRange(1, 400)
self.renderer.SetActiveCamera(self.camera)
self.render_window.Render()
def render_mesh(self, camera_position: np.ndarray, camera_focal_point: np.ndarray, pts_3d=None):
self.camera.SetPosition(*camera_position)
self.camera.SetFocalPoint(*camera_focal_point)
view_matrix = self.camera.GetViewTransformMatrix()
projection_matrix = self.camera.GetProjectionTransformMatrix(1, -1, 1)
view_matrix_np = np.array([view_matrix.GetElement(i, j) for i in range(4) for j in range(4)]).reshape((4, 4))
projection_matrix_np = np.array([projection_matrix.GetElement(i, j) for i in range(4) for j in range(4)]).reshape((4, 4))
rotation_det = np.linalg.det(view_matrix_np[:3, :3])
imaging_matrix = projection_matrix_np @ view_matrix_np
sensor_normal = camera_focal_point - camera_position
sensor_normal = sensor_normal / np.linalg.norm(sensor_normal)
sensor_plane = sensor_normal[0], sensor_normal[1], sensor_normal[2], -np.dot(camera_position, sensor_normal)
self.renderer.SetActiveCamera(self.camera)
self.render_window.Render()
window_to_image_filter = vtk.vtkWindowToImageFilter()
window_to_image_filter.SetInput(self.render_window)
# Bencmark:
# On Apple MAC M2 - 0.001
# AWS EC2 c7i.8xlarge Amazon linux (cpu) - 0.130
# AWS EC2 g5.2xlarge Ubuntu (GPU) - 0.134
with timing('this is slow'):
window_to_image_filter.Update()
- Mac M2: ~0,001 секунды< /li>
AWS EC2 c7i.8xlarge (ЦП): ~0,130 секунды AWS - EC2 g5.2xlarge (ГП): ~0,134 секунд
- Запуск кода с помощью xvfb для виртуальных отображение на EC2 (обязательно).
- Перешел с vtk-9.4.0 на vtk-osmesa, но производительность осталась прежней.
Поскольку я вызываю render_mesh() примерно на 500 различных camera_position< /code> в моем потоке, мне важно его ускорить.
Как оптимизировать конвейер рендеринга на AWS EC2, чтобы сократить время выполнения window_to_image_filter.Update()? р>
Существуют ли конкретные конфигурации или требования к оборудованию, которые могли бы устранить это несоответствие производительности?
Будем благодарны за любые рекомендации!
Подробнее здесь: https://stackoverflow.com/questions/792 ... c2-machine
Мобильная версия