Normal Computing Corporation

Ingeniero de Backend de compiladores

PythonC++Rust
Traducción automática. Consulta el original.

Sobre la oportunidad

Normal Computing | Construye con nosotros

El puesto

Normal es una empresa de IA aplicada que resuelve los problemas más complejos en IA y silicio. Desarrollamos hardware y software fundamentales para la industria de semiconductores, infraestructura crítica de IA y los sistemas más amplios que impulsan nuestro mundo, en colaboración con las instituciones más avanzadas del mundo. Trabajamos como un solo equipo en Nueva York, Silicon Valley (Mountain View), Londres, Copenhague y Seúl.

El hardware de Normal ejecuta las partes de la inferencia de modelos grandes que más dependen de la memoria dentro de la propia memoria, en lugar de transferir pesos a un procesador. El software que hace que esto sea programable aún no existe en ninguna forma estándar. Conseguir que un modelo funcione correctamente en ese hardware es trabajo del frontend; hacerlo rápido es el tuyo. Nuestro hardware no se parece a una CPU o GPU, por lo que su backend de compilador no puede tomarse prestado de una. Como ingeniero de compiladores centrado en el backend, ayudarás a diseñar y construir la compilación personalizada que asigna la inferencia de LLM sobre él, desde la programación y la planificación de memoria hasta el código que nuestro hardware realmente ejecuta.

Trabajarás en el límite entre el compilador y el hardware, lo suficientemente cerca como para saber cuándo una optimización pertenece a una capa diferente o cuándo la respuesta correcta es una nueva abstracción. Nuestro chip es pre-silicio, por lo que medirás tu trabajo frente a nuestros simuladores y prototipos FPGA primero, y frente al silicio a medida que llegue.

Lo que asumirás

  1. Generación de código: Construye los pases que convierten los programas de bajo nivel en el código que ejecuta nuestro hardware, diseñando nuevos enfoques de compilación donde los convencionales no encajan. El éxito significa un código correcto y eficiente para cada operación que nuestros modelos necesitan.
  1. Programación y planificación de memoria: Responsabilízate de cómo se programan y colocan el trabajo y los datos a través de los recursos de nuestro hardware, medido por la utilización y la latencia de extremo a extremo en la inferencia de LLM.
  1. Fusión y despacho: Responsabilízate de las decisiones de fusión y despacho para la inferencia de LLM, de modo que el hardware pase su tiempo calculando en lugar de moviendo datos.
  1. Codiseño de hardware: Trabaja en la capa de abstracción entre el compilador y el hardware, y comunica las restricciones del compilador a nuestros arquitectos de hardware mientras el diseño aún puede cambiar.
  1. Perfilado y validación: Valida cada optimización con resultados medidos de simuladores, prototipos FPGA y, posteriormente, silicio, y mantén un conjunto de regresión de rendimiento en el que el equipo confíe.
  1. Traspasos entre equipos: Toma los programas de bajo nivel de nuestros ingenieros de compiladores de frontend y decide con el equipo qué operaciones genera el compilador y cuáles utilizan kernels ajustados manualmente.

Lo que te hace un gran candidato

  1. Experiencia profunda en optimización de compiladores o generación de código para aceleradores u otros objetivos que no sean CPU: programación, mosaico (tiling), fusión o asignación de recursos.
  1. Comodidad trabajando cerca del hardware: piensas en términos de ancho de banda de memoria y utilización, así como en complejidad asintótica.
  1. Disposición para diseñar enfoques de compilación desde los principios básicos cuando los existentes no se ajustan al hardware.
  1. Historial de implementación de optimizaciones que movieron un número de rendimiento medido.
  1. Comodidad construyendo software para hardware que aún está evolucionando, desde la simulación hasta la puesta en marcha.
  1. Fluidez en Python y familiaridad con C, C++ o Rust.

Puntos extra

  1. Experiencia con la pila de compilación de PyTorch (TorchDynamo, FX, Inductor, torch.export) u otros compiladores de ML, como IREE, TVM o XLA.
  1. Experiencia en compilación para objetivos de computación en memoria, espaciales u otros objetivos que no sean de von Neumann.
  1. Antecedentes en herramientas de diseño de hardware como síntesis lógica o colocación y enrutamiento (place-and-route).
  1. Experiencia en la construcción o uso de simuladores de nivel de ciclo o de rendimiento para guiar las decisiones de optimización.
  1. Contribuciones a infraestructura de compiladores o kernels de código abierto (por ejemplo, PyTorch, Triton, TVM, MLIR, LLVM).
  1. Publicación o presentación de trabajos sobre compiladores o rendimiento en foros como MLSys, ASPLOS o CGO.

Declaración de igualdad de oportunidades en el empleo

Normal Computing es un empleador que ofrece igualdad de oportunidades. Celebramos la diversidad y estamos comprometidos a crear un entorno inclusivo para todos los empleados. Todos los solicitantes calificados recibirán consideración para el empleo sin distinción de raza, color, religión, sexo, orientación sexual, identidad de género, origen nacional, discapacidad, estatus de veterano o cualquier otro estatus legalmente protegido.

Adaptaciones por accesibilidad

Normal Computing se compromete a proporcionar adaptaciones razonables a las personas con discapacidad. Si necesitas asistencia o una adaptación debido a una discapacidad, por favor háznoslo saber en [email protected].

Aviso de privacidad

Al enviar tu solicitud, aceptas que Normal Computing pueda recopilar, utilizar y almacenar tu información personal para fines relacionados con el empleo de acuerdo con nuestro Aviso de privacidad para solicitantes.

Más oportunidades con un solo perfil

¿Quieres optar a más puestos sin repetir todo el proceso? Crea tu perfil para que te encuentren las empresas que usan Nort.

Crear mi perfil

Tu próximo empleoya está buscándote.

Nort

Plataforma de reclutamiento inverso para programadores