PageSourceSearch

https://www.pipeless.ai/docs/_next/static/chunks/pages/v1/container-1ec7dd6ad9a7207a.js

js pipeless.ai collected 2026-10-03 21:38:01 UTC 38,140 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[505],{9474:function(e,s,t){(window.__NEXT_P=window.__NEXT_P||[]).push(["/v1/container",function(){return t(6924)}])},9369:function(e,s,t){"use strict";var o=t(5893);t(7294);var i=t(5675),n=t.n(i),r=t(3750),a=t(1163),l=t(2681);let c={logo:(0,o.jsxs)("span",{style:{display:"flex",alignItems:"center"},children:[(0,o.jsx)(n(),{alt:"logo",width:30,height:30,src:"/docs/logo-400x400-rounded.png"}),"\xa0",(0,o.jsx)("b",{children:"Pipeless"})]}),logoLink:"https://pipeless.ai",primaryHue:297,project:{link:"https://github.com/pipeless-ai/pipeless"},chat:{link:"https://discord.gg/K2qxQ8uedG",icon:(0,o.jsx)(r.KpZ,{size:25})},docsRepositoryBase:"https://github.com/pipeless-ai/docs/tree/main",footer:{text:(0,o.jsx)("p",{children:"Copyright \xa9 2023 Pipeless, Inc."})},search:{loading:"Loading..."},head:()=>{let{asPath:e,defaultLocale:s,locale:t}=(0,a.useRouter)(),{frontMatter:i}=(0,l.ZR)(),n="https://www.pipeless.ai"+(s===t?e:"/".concat(t).concat(e));return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)("meta",{property:"og:url",content:n}),(0,o.jsx)("meta",{property:"og:title",content:i.title||"Pipeless Documentation"}),(0,o.jsx)("meta",{property:"og:description",content:i.description||"Documentation about Pipeless, the computer vision framework"}),(0,o.jsx)("meta",{property:"og:image",content:"https://www.pipeless.ai/docs/logo-400x400-rounded.png"})]})},useNextSeoProps:()=>({titleTemplate:"%s – Pipeless"}),banner:{dismissible:!1,key:"agents",text:(0,o.jsx)("a",{target:"blank",href:"https://agents.pipeless.ai",children:(0,o.jsxs)("p",{children:["\uD83D\uDE80 \xa0\xa0",(0,o.jsx)("b",{children:"Pipeless Agents is live!"}),"\xa0Create vision powered apps and automations effortlessly within seconds.\xa0",(0,o.jsx)("span",{style:{textDecoration:"underline"},children:"Click here to get started!"})]})})},sidebar:{defaultMenuCollapseLevel:1}};s.Z=c},6924:function(e,s,t){"use strict";t.r(s),t.d(s,{__toc:function(){return c}});var o=t(5893),i=t(2673),n=t(2681),r=t(9369);t(9966);var a=t(2643),l=t(9013);let c=[{depth:2,value:"Image Usage",id:"image-usage"},{depth:3,value:"GPU usage with CUDA",id:"gpu-usage-with-cuda"},{depth:3,value:"Install Custom Python Packages",id:"install-custom-python-packages"},{depth:3,value:"Important Notes",id:"important-notes"},{depth:2,value:"Docker compose usage",id:"docker-compose-usage"}];function d(e){let s=Object.assign({h1:"h1",p:"p",ul:"ul",li:"li",code:"code",h2:"h2",pre:"pre",span:"span",h3:"h3"},(0,a.a)(),e.components);return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(s.h1,{children:"Pipeless Container Images \uD83D\uDC0B"}),"\n",(0,o.jsx)(s.p,{children:"The container images provide a way to run Pipeless out-of-the-box without having to deal with dependencies."}),"\n",(0,o.jsx)(s.p,{children:"We provide several images:"}),"\n",(0,o.jsxs)(s.ul,{children:["\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"miguelaeh/pipeless:{version}"}),": Default image with enough dependencies to play and test Pipeless on CPU."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"miguelaeh/pipeless:{version}-cuda"}),": Image to run Pipeless with CUDA support for running inference. When using this image you need to install the Nvidia Container Toolkit on your system."]}),"\n",(0,o.jsxs)(s.li,{children:[(0,o.jsx)(s.code,{children:"miguelaeh/pipeless:{version}-tensorrt"}),": Image to run Pipeless using TensorRT based GPUs. When using this image you need to install the Nvidia Container Toolkit on your system."]}),"\n"]}),"\n","\n",(0,o.jsx)(s.h2,{id:"image-usage",children:"Image Usage"}),"\n",(0,o.jsx)(s.p,{children:"Print help command:"}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"run"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--rm"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"miguelaeh/pipeless"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--help"})]})})}),"\n",(0,o.jsx)(s.p,{children:"Create a new project locally:"}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"run"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--rm"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-it"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/your/project/dir:/app"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"miguelaeh/pipeless"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"init"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"my_project"})]})})}),"\n",(0,o.jsx)(l.UW,{children:(0,o.jsx)(s.p,{children:"Note you must mou
1nt as volume your project directory, since a new folder will be generated for your application.\nThe rest of the commands take the actual application directory."})}),"\n",(0,o.jsxs)(l.UW,{children:[(0,o.jsxs)(s.p,{children:["The Pipeless container is non-root, so the mounted volume must have ",(0,o.jsx)(s.code,{children:"rwx"})," permissions for the ",(0,o.jsx)(s.code,{children:"root"})," group. In Linux, the ",(0,o.jsx)(s.code,{children:"root"})," group is just like any other group and by default new users belong to it. Since the Pipeless container is non-root it uses the user ",(0,o.jsx)(s.code,{children:"1001"}),", thus, the required permissions allow it to created content in the mounted volume.\nYou can run:"]}),(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"chgrp"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-R"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"root"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/your/project/dir"})]})})})]}),"\n",(0,o.jsx)(s.p,{children:"Start Pipeless:"}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"run"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--rm"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/your/project/dir:/app"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"miguelaeh/pipeless"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"start"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--stages-dir"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/app"})]})})}),"\n",(0,o.jsx)(s.h3,{id:"gpu-usage-with-cuda",children:"GPU usage with CUDA"}),"\n",(0,o.jsxs)(s.p,{children:["Use the image ",(0,o.jsx)(s.code,{children:"miguelaeh/pipeless:latest-cuda"}),". To properly use CUDA inside the container, your host system needs to have ",(0,o.jsx)(s.code,{children:"nvidia-container-toolkit"})," installed. Run the following commands to install it:"]}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"curl"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-fsSL"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://nvidia.github.io/libnvidia-container/gpgkey"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"sudo"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"gpg"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--dearmor"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-o"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"}
1,children:"/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"  "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:"&&"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"curl"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-s"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-L"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"    "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"sed"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:"'s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g'"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"|"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"    "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"sudo"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"tee"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/etc/apt/sources.list.d/nvidia-container-toolkit.list"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"  "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:"&&"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"    "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"sudo"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"apt-get"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"update"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" \\"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"  "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-punctuation)"},children:"&&"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"sudo"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"apt-get"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"install"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-y"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"nvidia-container-toolkit"})]})]})}
1),"\n",(0,o.jsx)(s.p,{children:"Then restart the docker daemon to load the toolkit:"}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"systemctl"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"restart"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"docker"})]})})}),"\n",(0,o.jsxs)(s.p,{children:["Finally, run the image by providing the ",(0,o.jsx)(s.code,{children:"--gpus all"})," option:"]}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"run"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--gpus"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"all"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/your/project/dir:/app"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"  "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"miguelaeh/pipeless:latest-cuda"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"start"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--stages-dir"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/app"})]})})}),"\n",(0,o.jsxs)(s.p,{children:["To verify the image is recognizing the GPU you can use the ",(0,o.jsx)(s.code,{children:"nvidia-smi"})," command as follows:"]}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"run"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--gpus"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"all"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--entrypoint"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"nvidia-smi"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"miguelaeh/pipeless:latest-cuda"})]})})}),"\n",(0,o.jsx)(s.h3,{id:"install-custom-python-packages",children:"Install Custom Python Packages"}),"\n",(0,o.jsxs)(s.p,{children:["Sometimes, your app may require Python packages that are not installed by default into the pipeless container. You can use the ",(0,o.jsx)(s.code,{children:"PIPELESS_USER_PYTHON_PACKAGES"})," variable to automatically install them on start. You can specify them as a list separated by commas (",(0,o.jsx)(s.code,{children:","}),"), semicolons (",(0,o.jsx)(s.code,{children:";"}),") or spaces (",(0,o.jsx)(s.code,{children:" "}),"). For example:"]}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"run"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--rm"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-e"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"PIPELESS_USER_PYTHON_PACKAGES=opencv-python;some_other_package,another_one"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"miguelaeh/pipeless"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"start"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--stages-dir"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/app"})]})})}),"\n",(0,o.jsxs)(s.p,{children:["To avoid installing packages every time you run the image mount a volume at ",(0,o.jsx)(s.code,{children:"/.venv"}),":"]}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsxs)(s.code,{"data-language":"bash","data-theme":"default",children:[(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"mkdir"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/tmp/venv"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"sudo"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"chown"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-constant)"},children:"1001"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/tmp/venv"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-comment)"},children:"# Give the proper permissions for the non-root image"})]}),"\n",(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"run"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--rm"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"/tmp/venv:/.venv"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"/tmp/app:/app"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-e"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string-expression)"},children:'"PIPELESS_USER_PYTHON_PACKAGES=opencv-python;some_other_package,another_one"'}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"miguelaeh/pipeless"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"start"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"--stages-dir"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/app"})]})]})}),"\n",(0,o.jsx)(s.h3,{id:"important-notes",children:"Important Notes"}),"\n",(0,o.jsxs)(s.p,{children:["If you want to store the processed media in a file, it must be done in a path under ",(0,o.jsx)(s.code,{children:"/app"}),". For example, when providing a stream use ",(0,o.jsx)(s.code,{children:"--output-uri 'file:///app/my_output_file.mp4'"}),".\nFurthermore, the directory mounted at ",(0,o.jsx)(s.code,{children:"/app"})," (i.e. ",(0,o.jsx)(s.code,{children:"/your/project/dir"})," on the above examples) must have write permissions for the ",(0,o.jsx)(s.code,{children:"root"})," group."]}),"\n",(0,o.jsx)(s.h2,{id:"docker-compose-usage",children:"Docker 
1compose usage"}),"\n",(0,o.jsxs)(s.p,{children:["The ",(0,o.jsx)(s.code,{children:"docker-compose.yaml"})," file allows you to automatically deploy your application locally as if it would be deployed to the cloud."]}),"\n",(0,o.jsx)(s.p,{children:"Start docker-compose:"}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"APP_DIR"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/your/project/dir"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"compose"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"up"})]})})}),"\n",(0,o.jsx)(s.p,{children:"Stop the docker-compose:"}),"\n",(0,o.jsx)(s.pre,{"data-language":"bash","data-theme":"default",hasCopyCode:!0,children:(0,o.jsx)(s.code,{"data-language":"bash","data-theme":"default",children:(0,o.jsxs)(s.span,{className:"line",children:[(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:"APP_DIR"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-keyword)"},children:"="}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"/your/project/dir"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-function)"},children:"docker"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"compose"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"down"}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-color-text)"},children:" "}),(0,o.jsx)(s.span,{style:{color:"var(--shiki-token-string)"},children:"-v"})]})})})]})}let h={MDXContent:function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},{wrapper:s}=Object.assign({},(0,a.a)(),e.components);return s?(0,o.jsx)(s,{...e,children:(0,o.jsx)(d,{...e})}):d(e)},pageOpts:{filePath:"pages/v1/container.mdx",route:"/v1/container",frontMatter:{title:"Container Images",description:"Learn to run and deploy Pipeless using container images. There are images available for CPU, and GPU (CUDA and TensorRT). The container images can also be used to easily deploy Pipeless to the cloud."},timestamp:1708701383e3,pageMap:[{kind:"Meta",data:{index:"Introduction",contributing:"Contributing","-- Versions":{type:"separator",title:"Versions"},v1:"v1.x.x",v0:"v0.x.x",about:{title:"Home",type:"page",href:"https://pipeless.ai"},contact:{title:"Contact ↗",type:"page",href:"https://lfkz9noht13.typeform.com/to/aeOqKGPt",newWindow:!0}}},{kind:"MdxPage",name:"contributing",route:"/contributing",frontMatter:{title:"Contributing Guidelines",description:"Contribute to the Pipeless open-source computer vision framework in GitHub"}},{kind:"MdxPage",name:"index",route:"/",frontMatter:{title:"Introduction",description:"Introduction to Pipeless, the open-source and production ready computer vision framework. Enjoy serverless development experience for embedded computer vision."}},{kind:"MdxPage",name:"v0",route:"/v0",frontMatter:{title:"Pipeless v0.x",description:"Documentation for Pipeless versions 0.x. The open-source computer vision framework"}},{kind:"Folder",name:"v1",route:"/v1",children:[{kind:"Meta",data:{"getting-started":"\uD83D\uDE80 Getting Started","rest-api":"Pipeless REST API",formats:"Stream Formats and Protocols",inference:"Inference Runtimes",kvstore:"Key Value Store",container:"\uD83D\uDC0B Container images",deployment:"Deploying your application",models:"Ready to Use CV Models",monitoring:"Export and monitor stream events",examples:"\uD83C\uDF1F Examples",benchmark:"Benchmark",changes:"Version Notable Changes",troubleshooting:"Troubleshooting","restart-policy":"Processing Restart Policy"}},{kind:"MdxPage",name:"benchmark",route:"/v1/benchmark",frontMatter:{title:"Benchmark",description:"A benchmark obtained by running the Pipeless computer vision framework on different devices to measure the overhead"}},{kind:"MdxPage",name:"changes",route:"/v1/changes",frontMatter:{title:"Notable version changes",description:"A list of important changes between Pipeless ver
1sions"}},{kind:"MdxPage",name:"container",route:"/v1/container",frontMatter:{title:"Container Images",description:"Learn to run and deploy Pipeless using container images. There are images available for CPU, and GPU (CUDA and TensorRT). The container images can also be used to easily deploy Pipeless to the cloud."}},{kind:"MdxPage",name:"deployment",route:"/v1/deployment",frontMatter:{title:"Deploying your pipeless application",description:"Learn how to deploy a Pipeless application to either an edge device or to the cloud. Pipeless ca run in distributed cloud servers as well as edge and IoT devices."}},{kind:"Folder",name:"examples",route:"/v1/examples",children:[{kind:"Meta",data:{wattermark:"Adding wattermarks","custom-data":"Passing data between hooks and stages",cats:"Detecting Cats on a Video","tf-pose":"Pose detection with TensorFlow",yolov8:"Object detection - YOLOv8 Python lib","onnx-candy":"ONXX Runtime - Candy filter","onnx-yolo":"ONNX Runtime - Object detection with YOLO","onnx-yolo-world":"ONNX Runtime - PPE detection with YOLO-World","gaze-piano":"Play a piano with your eyes by looking to the notes","object-tracking":"Object tracking - YOLO and Norfair"}},{kind:"MdxPage",name:"cats",route:"/v1/examples/cats",frontMatter:{title:"Cats recognition example",description:"A Pipeless example to recognize and detect cats in a video stream"}},{kind:"MdxPage",name:"custom-data",route:"/v1/examples/custom-data",frontMatter:{title:"Passing data between stages",description:"A Pipeless example to show how you can easily add custom data to a frame, making it available for subsequent hooks."}},{kind:"MdxPage",name:"gaze-piano",route:"/v1/examples/gaze-piano",frontMatter:{title:"Play a piano with your eyes - Gaze estimation",description:"A Pipeless example that allows you play a virtual piano with your eyes by looking to the note you want to play"}},{kind:"MdxPage",name:"object-tracking",route:"/v1/examples/object-tracking",frontMatter:{title:"Object tracking with YOLO, Norfair and Pipeless",description:"A Pipeless example that runs inference using a YOLO model and performs object tracking via Norfair trackers"}},{kind:"MdxPage",name:"onnx-candy",route:"/v1/examples/onnx-candy",frontMatter:{title:"Candy filter with ONNX runtime",description:"A Pipeless example using the ONNX Runtime to apply a candy filter to a video stream"}},{kind:"MdxPage",name:"onnx-yolo-world",route:"/v1/examples/onnx-yolo-world",frontMatter:{title:"PPE detection with ONNX Runtime and YOLO-World",description:"A Pipeless example that runs inference using the ONNX Runtime and YOLO World to detect Personal Protective Equipment (PPE) in a video stream"}},{kind:"MdxPage",name:"onnx-yolo",route:"/v1/examples/onnx-yolo",frontMatter:{title:"Object detection with ONNX Runtime",description:"A Pipeless example that runs inference using the ONNX Runtime and YOLO to detect objects in a video stream"}},{kind:"MdxPage",name:"tf-pose",route:"/v1/examples/tf-pose",frontMatter:{title:"Pose estimation/detection with TensorFlow",description:"A Pipeless example that detects the pose with 17 keypoints in a video stream"}},{kind:"MdxPage",name:"wattermark",route:"/v1/examples/wattermark",frontMatter:{title:"Adding wattermarks to a video",description:"The most basic Pipeless example adding a wattermark to a video"}},{kind:"MdxPage",name:"yolov8",route:"/v1/examples/yolov8",frontMatter:{title:"Object detection with YOLOv8 and Ultralytics SDK",description:"A Pipeless example to detect objects in a video stream using YOLOv8 via the Ultralytics Python SDK"}}]},{kind:"MdxPage",name:"examples",route:"/v1/examples",frontMatter:{title:"Examples",description:"A list of fully functional examples to play around with the Pipeless computer vision framework."}},{kind:"MdxPage",name:"formats",route:"/v1/formats",frontMatter:{title:"Supported stream formats and protocols",description:"Learn the supported formats and protocols that can be used to provide video to your Pipeless application"}},{kind:"Folder",name:"getting-started",route:"/v1/getting-started",children:[{kind:"Meta",data:{installation:"\uD83D\uDEE0️ Installation","project-structure":"\uD83D\uDCC2 Project Structure"}},{kind:"MdxPage",name:"installation",route:"/v1/getting-started/installation",frontMatter:{title:"Installation guide",description:"Learn to install Pipeless, the computer vision framework"}},{kind:"MdxPage",name:"project-structure",route:"/v1/getting-started/project-structure",frontMatter:{title:"Project structure",description:"Learn how a Pipeless project is structured in the filesystem"}}]},{kind:"MdxPage",name:"getting-started",route:"/v1/getting-started",frontMatter:{title:"Getting started",description:"Get started with the Pipeless computer vision framework and enjoy the development experience of serverless frameworks for embedded computer vision."}},{kind:"MdxPage",name:"inference",route:"/v1/inference",frontMatter:{title:"Inference runtimes",description:"Learn to how to load a model into one of the embedded inference runtimes to perform your computer vision tasks in CPU, or GPUs. Use CUDA, TensorRT, OpenVINO, CoreML in any kind of GPU, including Nvidia GPUs."}},{kind:"MdxPage",name:"kvstore",route:"/v1/kvstore",frontMatter:{title:"Key-Value Store usage",description:"Learn to how use the included key value store to communicate data between the processing of different frames and the execution of different hooks"}},{kind:"Folder",name:"models",route:"/v1/models",children:[{kind:"Folder",name:"tensorflow",route:"/v1/models/tensorflow",children:[{kind:"MdxPage",name:"multi-pose-estimation",route:"/v1/models/tensorflow/multi-pose-estimation",frontMatter:{title:"Multi-pose estimation Tensorflow Model",description:"A ready to use TensorFlow model for multipose estimation in Python"}},{kind:"Meta",data:{"multi-pose-estimation":"Multi-pose estimation Tensorflow Model"}}]},{kind:"MdxPage",name:"tensorflow",route:"/v1/models/tensorflow"},{kind:"Meta",data:{tensorflow:"Tensorflow"}}]},{kind:"MdxPage",name:"models",route:"/v1/models",frontMatter:{title:"Ready to use computer vision models",description:"A list of ready to use computer vision models with Python APIs"}},{kind:"MdxPage",name:"monitoring",route:"/v1/monitoring",frontMatter:{title:"Exporting stream events",description:"Understand how to export and monitor stream events from Pipeless"}},{kind:"MdxPage",name:"rest-api",route:"/v1/rest-api",frontMatter:{title:"Pipeless REST API",description:"Documentation about the endpoints exposed by a running Pipeless instance"}},{kind:"MdxPage",name:"restart-policy",route:"/v1/restart-policy",frontMatter:{title:"Processing Restart Policy",description:"Documentation about the restart policy for stream processing"}},{kind:"MdxPage",name:"troubleshooting",route:"/v1/troubleshooting",frontMatter:{title:"Troubleshooting your Pipeless application",description:"General guidance and common issues when running your Pipeless application"}}]},{kind:"MdxPage",name:"v1",route:"/v1",frontMatter:{title:"Pipeless v1.x",description:"Documentation for Pipeless ver
1sions 1.x. The open-source computer vision framework"}}],flexsearch:{codeblocks:!0},title:"Container Images",headings:c},pageNextRoute:"/v1/container",nextraLayout:n.ZP,themeConfig:r.Z};s.default=(0,i.j)(h)}},function(e){e.O(0,[13,996,774,888,179],function(){return e(e.s=9474)}),_N_E=e.O()}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.