DevOps Dojo: Build & Run - DE and PE Implementation Discussion #3651
Replies: 11 comments 40 replies
-
Hi, We could start by defining the ideal Dev Environment in case of dependencies. Then from there, we can move on with the runtime environment which means refining dependencies into minimum required ones for runtime only. We have dependencies from ansible which are 3rd party requirements and from rosdep which comes directly from the codebase. From a practical perspective, we could start from ansible playbook and try to refine our requirements as DE or PE. |
Beta Was this translation helpful? Give feedback.
-
Discussion points:
Please share you thoughts and opinions! |
Beta Was this translation helpful? Give feedback.
-
Related to this discussion, we have recently submitted a proposal to Autoware Challenge 2023. I hope we are not too far off for the challenge themes, yet this is a topic we would like to pursue regardless. I want to keep this group informed. In essence, we propose to organize Autoware repositories as Ansible collections. Under this model, we refer to Please find the proposal document here: |
Beta Was this translation helpful? Give feedback.
-
Open AD Kit meeting August 3
Approach:
|
Beta Was this translation helpful? Give feedback.
-
Since the last Open AD Kit meeting, I think we've finished the main part of the theoretical discussion. @kaspermeck-arm's summary sums it up perfectly. Therefore, our first goal is to reduce the DE container image size, this will clear the ground for optimal runtime images as well as the fix for the CI issue which building container takes a lot of time (autowarefoundation/autoware.universe#4497) In that regard I want to start the technical discussion on how we can reduce the size of the image:
|
Beta Was this translation helpful? Give feedback.
-
The following two Nvidia packages already require 9.2GB disk space without ROS (~1GB) and Autoware source dependencies (~5GB) installed.
If these packages are not absolutely necessary, then there is a chance. But I am not familiar to the perception stack. Otherwise, the target of 12 GB does not seem possible under the current monorepo approach. |
Beta Was this translation helpful? Give feedback.
-
So how about first defining the ideal modular Ansible scheme and then refining the packages inside of each Ansible rule ? |
Beta Was this translation helpful? Give feedback.
-
OADK Meeting August 10thDevelopment Environment (DE) validationValidates ROS and up.
Once 1-4 have been successfully run, the container has passed and is considered validated. Production Environment (PE) validationValidates ROS and up. The PE is a subset of the DE.
|
Beta Was this translation helpful? Give feedback.
-
OADK Meeting August 17thDevelopment Environment (DE) using NVCR containerThere is an upper limit of 14GB container size in GitHub. Using The next steps are:
|
Beta Was this translation helpful? Give feedback.
-
Here is my container experiment. After installing the required CUDA libraries, CUDNN, and TensorRT using Nvidia debs on the ROS base image, I have removed their static libraries. That saved a great deal of disk space and the image is now 7.2G and can build Universe. Could you please check and test the following build and prebuilt images, if possible? Container files: https://github.com/bounverif/autoware-istanbul/tree/main/containers The prebuilt image, which includes build artifacts (~2.5G), is also now reduced below 12G. I believe this image would be similar to what @xmfcx wants to use for the CI workflow, as explained at autowarefoundation/autoware.universe#4497. |
Beta Was this translation helpful? Give feedback.
-
Hi, I’m an intern at Red Hat and currently work on the Fedora CoreOS team. I have limited experience with Autoware, but I’ve worked with ROS for some of my university courses. As part of my personal side project, I have a potential idea I want to share and would love to get some feedback on it. I’ll try my best to summarize the discussion so far, but please forgive me if I’ve misinterpreted anything and feel free to correct me: What we are looking for is an easy way to set up development and/or production environments for Autoware, which implies installing ROS and Autoware dependencies and configuring the environment. There seems to be some talk about using Ansible scripts to install the dependencies, but I think there’s a current focus on running Autoware in a container with the dependencies and environment pre-installed/configured. There also seems to be some success in reducing the size of this container image. From learning about the context of this discussion thread, CoreOS seems like a great fit here because it supports containerized workloads, lightweight, and immutable (important for security). To provide some context, Red Hat CoreOS is used as the base operating system for OpenShift, Red Hat’s enterprise Kubernetes Platform. Here’s the idea that I wanted to share: Fedora CoreOS (the upstream of Red Hat CoreOS) currently supports ostree native containers (https://coreos.github.io/rpm-ostree/container/) which allows the OS to boot and upgrade from a container image. In other words, the container image is not run as a container, but it changes the OS itself. Therefore, you can use a Fedora CoreOS base image, layer dependencies on top of it in a Dockerfile, and then push it to a remote registry. Other people who are running Fedora CoreOS can rebase their system to the container image, and their system will have the dependencies. As a proof of concept, I’ve been able to layer the ROS2 source installation on the official Fedora CoreOS container image and can rebase my system to the image. A ROS2 folder is now on my system, and after sourcing the environment, I can run the demo talker and listener nodes successfully. Dockerfile: https://github.com/lukewarmtemp/ros2-fedora-coreos Here is the document providing the motivation behind layering ROS2 on top of Fedora CoreOS: https://hackmd.io/i1WtwJdDR9KPo8TDQwZw1g?view. I would love to have a discussion as to whether layering Autoware on my image and running it natively on the OS (and not in a container) is something worth pursuing. As a side note, I believe that bootable container images will be a large part of the future and a lot of recent efforts have been working to achieve this (ie. bootc: https://github.com/containers/bootc) |
Beta Was this translation helpful? Give feedback.
-
Background
The summary below is still WIP and will be updated as discussion leads to decisions.
DevOps Dojo: Build & Run aim to separate the development environment (DE) and the production environment (PE).
Environments
Autoware compatible environments can be implemented in the following ways:
Ideally, it'd be possible to create and configure these environments from a single source of truth which meets the Autoware ROS package requirements.
Dependencies
Software dependencies are required to run Autoware.
Autoware dependencies:
Installing Dependencies
Currently, three methods are used to create (and configure) the environment.
Ansible
rosdep
registryThe idea is to extend the registry with Autoware-specific dependencies. See
rosdep
tutorial for more information.Pros
Cons
Dockerfile
Configuration
Once the required dependencies are installed, the environment needs to be configured correctly.
Configuration of the environment should be separate from the dependencies. (Note: ROS node parameter and launch files are not part of the environment configuration.)
Approach
What approach should we take to implement the DE and PE?
Gather Environment Dependencies
Beta Was this translation helpful? Give feedback.
All reactions