Python and System dependencies of functions can be packaged into images.

Custom Docker Images

Specify the commands to install dependencies in a custom Docker image. You can choose any base image, and install any system or python dependencies.

An image can be used to run multiple functions. You can specify the image name in the function decorator.

Step 1: Define the Image

from tensorlake import Image

image = (
    Image()
    .name("my-pdf-parser-image")
    .base_image("ubuntu:22.04")
    .run("apt update")
    .run("apt install -y libgl1-mesa-glx git g++")
    .run("pip install torch")
    .run("pip install numpy")
    .run("pip install langchain")
    .run("pip install git+https://github.com/facebookresearch/detectron2.git@v0.6")
    .run("apt install -y tesseract-ocr")
    .run("apt install -y libtesseract-dev")
)

This defines an Image object and specify the name of the image. We then run commands to install the dependencies. You can use any base image, the default being python:3.11.10-slim-bookworm.

Step 2: Use the Image in a Function

from tensorlake import tensorlake_function

@tensorlake_function(image=image)
def parse_pdf(pdf_path: str) -> str:
    ...

In the function decorator, we pass the image object. This tells Tensorlake to run the function in the specified image.

Step 3: Build the Image

You can build the Docker image using the tensorlake prepare command.

Assuming the function is in a file named pdf_parser.py, you can run:

tensorlake prepare pdf_parser.py my-pdf-parser-image

This will build the Docker image, named my-pdf-parser-image.

This is useful for ensuring the image will build successfully for example during CI (Continuous Integration) before deploying the image and graph.

Step 4: Deploying Functions

When you deploy a graph, images are automatically build as part of the deploy process.

Tensorlake will ensure that all invocations of a specific function is done within the image defined on the tensorlake_function decorator.