Staff Software Engineer
Job description
About the role
Graphcore is seeking a senior engineer to help build the future of AI compute by validating our complex machine learning software stack. You will work on software architecture and automation to ensure our hardware and software systems meet high standards for reliability and performance. In this capacity, you will act as a key technical owner for critical testing and validation initiatives that directly influence the quality and correctness of our products. The role requires a deep commitment to engineering rigor and a passion for solving problems that span both software and hardware boundaries. You will be responsible for driving the development of robust test frameworks that keep our development cycles efficient and predictable. This position is integral to maintaining the high standards required for cutting edge AI hardware development. Your work will ensure that the software tools used by our researchers and engineers are dependable, scalable, and performant. By focusing on automation and infrastructure, you will remove barriers that slow down innovation across the organization.
Key facts
What you'll do
- Develop and maintain test infrastructure and automation for our ML software stack, ensuring coverage across diverse scenarios and edge cases.
- Evolve test frameworks to improve scalability and the developer experience, making it easier for engineers to write and run high quality tests.
- Manage CI/CD pipelines that interface with simulators, QEMU, and physical hardware, orchestrating complex workflows with precision.
- Create and analyze ML workloads to assess numerical accuracy, performance, and benchmarking, providing insights that guide architectural decisions.
- Collaborate with software development teams to promote quality, security, and maintainability, embedding best practices into the development lifecycle.
- Perform code and design reviews to uphold engineering standards, identifying risks early and facilitating knowledge sharing.
- Mentor junior team members to increase the technical capability of the group, fostering a culture of learning and continuous improvement.
- Audit current testing strategies to identify and address gaps, reducing technical debt and improving long term maintainability.
- Design experiments that validate the interaction between software optimizations and hardware behavior, ensuring correctness under varied conditions.
- Contribute to the definition of testing standards and processes that align with industry best practices and regulatory expectations.
- Investigate production issues and regressions by correlating test results with system telemetry to pinpoint root causes quickly.
- Build reusable utilities and tooling that abstract complexity and enable other engineers to focus on higher level problem solving.
- Partner with research and product teams to translate ambitious ideas into testable hypotheses and verifiable outcomes.
- Drive the adoption of new testing methodologies, such as property based testing and fuzzing, to increase confidence in our software.
Requirements
- Professional experience in software engineering, with a demonstrated history of delivering complex systems in demanding environments.
- Proficiency in software design and architecture for complex systems, including a clear understanding of tradeoffs in scalability and maintainability.
- Strong Python skills for production-level code, including experience with testing libraries, debugging, and performance optimization.
- Experience with CI/CD systems and automated testing, preferably using GitHub workflows, to build reliable and repeatable pipelines.
- Background working in Linux environments, including command line proficiency, scripting, and system level debugging.
- Ability to read and debug C or C++ code, enabling effective collaboration with teams working on low level components and drivers.
- Proven track record of mentoring others and influencing team practices, helping to elevate the overall engineering standard.
- Bachelor, Master, or PhD in Computer Science, Mathematics, Machine Learning, Data Science, or a related field, providing a strong theoretical foundation.
- Experience working with version control systems such as Git, understanding branching strategies, code reviews, and diff based workflows.
- Familiarity with debugging techniques, including the use of logs, metrics, and trace data to isolate issues in distributed systems.
- Understanding of software testing principles, including unit testing, integration testing, and end to end testing strategies.
- Commitment to writing clean, documented, and maintainable code that can be understood and extended by other engineers.
- Willingness to work within a regulated and fast paced environment where requirements can evolve rapidly based on technical discoveries.
- Ability to communicate technical concepts clearly to both technical and non technical stakeholders, ensuring alignment on goals and risks.
Nice to have
- Familiarity with ML frameworks such as PyTorch, JAX, Triton, TensorFlow, or Keras, providing context for testing machine learning specific behaviors.
- Experience with distributed workload management or MLOps, including Kubernetes or VLLM, supporting the orchestration of large scale experiments.
- Background working with hardware simulators, emulators like QEMU, or FPGA-based systems, enabling deeper validation of hardware software interactions.
- Prior experience in people management, including setting expectations, conducting performance reviews, and supporting career growth.
Practical notes
- Hours: Full-time during standard business hours.
- Travel: Bristol, UK location with no required travel.
- Visa: Sponsorship may be available for eligible candidates.
- Deadlines: Applications will be reviewed on a rolling basis until the position is filled.