Skip to main content

Simplify deploying and managing Jina projects on Jina Cloud

Project description




JCloud logo: the command line interface that simplifies deploying and managing Jina projects on Jina Cloud


Simplify deploying and managing Jina projects on Jina Cloud

PyPI

☁️ To the cloud! - Smoothly deploy a local project as a cloud service. Radically easy, no nasty surprises.

🎯 Cut to the chase - One CLI with five commands to manage the lifecycle of your Jina projects.

🎟️ Early free access - Sneak peek at our stealthy cloud hosting platform. Built on latest cloud-native tech stack, we now host your Jina project and offer computational and storage resources, for free!

Install

pip install jcloud
jc -h

In case jc is already occupied by another tool, please use jcloud instead. If your pip install doesn't register bash commands for you, you can run python -m jcloud -h.

Get Started

Login

jc login

You can use a Google/GitHub account to register and login. Without logging in, you can't do anything.

Deploy a Jina Project

In Jina's idiom, a project is a Flow, which represents an end-to-end task such as indexing, searching or recommending. In this README, we will use "project" and "Flow" interchangeably.

A Flow can have two types of file structure:

A single YAML file

A self-contained YAML file, consisting of all configs at the Flow-level and Executor-level.

All Executors' uses must follow the format jinahub+docker://MyExecutor (from Jina Hub) to avoid any local file dependencies.

e.g.-

# flow.yml
jtype: Flow
executors:
  - name: sentencizer
    uses: jinahub+docker://Sentencizer

To deploy,

jc deploy flow.yml

Local projects

Just like a regular Python project, you can have sub-folders of Executor implementations; and a flow.yml on the top-level to connect all Executors together.

You can create an example local project using jc new. The default structure looks like:

.
├── .env
├── executor1
│   ├── config.yml
│   ├── executor.py
│   └── requirements.txt
└── flow.yml

where,

  • executor1 directory has all Executor related code/config. You can read the best practices for file structures. Multiple such Executor directories can be created.
  • flow.yml Your Flow YAML.
  • .env All environment variables used during deployment.

To deploy,

jc deploy ./hello

The Flow is successfully deployed when you see:

You will get a Flow ID, say 173503c192. This ID is required to manage, view logs and remove the Flow.

As this Flow is deployed with default gRPC gateway (feel free to change it to http or websocket), you can use jina.Client to access it:

from jina import Client, Document

c = Client(host='https://173503c192.wolf.jina.ai')
print(c.post('/', Document(text='hello')))

Environment variables

Local project
  • You can include your environment variables in the .env file in the local project and JCloud will take care of managing them.
  • You can optionally pass a custom.env.
    jc deploy ./hello --env-file ./hello/custom.env
    
Local yaml
jc deploy flow.yml --env-file flow.env

View logs

To watch the logs in realtime:

jc logs 173503c192

You can also stream logs for a particular Executor by passing its name:

jc logs 173503c192 --executor sentencizer

Remove Flow(s)

You can either remove a single Flow, multiple selected Flows or even all Flows by passing different kind of identifiers.

To remove a single Flow:

jc remove 173503c192

To remove multiple selected Flows:

jc remove 173503c192 887f6313e5 ddb8a2c4ef

To remove all Flows:

jc remove all

By default, removing multiple selected / all Flows would be in interactive mode where confirmation will be sent prior to the deletion, to make it non-interactive to better suit your use case, set below environment variable before running the command:

export JCLOUD_NO_INTERACTIVE=1

Get the status of a Flow

jc status 173503c192

List Flows on the cloud

jc list

You can see the ALIVE Flows deployed by you.

You can also filter your Flows by passing a status:

jc list --status FAILED

Or see all the flows:

jc list --status ALL

Advanced deployments

Fine-grained resources request

By default, jcloud allocates 100M of RAM to each Executor. There might be cases where your Executor requires more memory. For example, DALLE-mini (generating image from text prompt) would need more than 100M to load the model. You can request higher memory for your Executor using resources arg while deploying the Flow (max 16G allowed per Executor).

jtype: Flow
executors:
  - name: dalle_mini
    uses: jinahub+docker://DalleMini
    jcloud:
      resources:
        memory: 8G

spot vs on-demand capacity

For cost optimization, jcloud tries to deploy all Executors on spot capacity. These are ideal for stateless Executors, which can withstand interruptions & restarts. It is recommended to use on-demand capacity for stateful Executors (e.g.- indexers) though.

jtype: Flow
executors:
  - name: custom
    uses: jinahub+docker://CustomExecutor
    jcloud:
      capacity: on-demand

Deploy External Executors

You can also expose the Executors only by setting expose_gateway to false. Read more about External Executors.

jtype: Flow
jcloud:
  expose_gateway: false
executors:
  - name: custom
    uses: jinahub+docker://CustomExecutor

Similarly, you can also deploy & expose multiple External Executors.

jtype: Flow
jcloud:
  expose_gateway: false
executors:
  - name: custom1
    uses: jinahub+docker://CustomExecutor1
  - name: custom2
    uses: jinahub+docker://CustomExecutor2

FAQ

  • Why does it take a while on every operation of jcloud?

    Because the event listener at Jina Cloud is serverless by design, which means it spawns an instance on-demand to process your requests from jcloud. Note that operations such as deploy, remove in jcloud are not high-frequency. Hence, having a serverless listener is much more cost-efficient than an always-on listener. The downside is slower operations, nevertheless this does not affect the deployed service. Your deployed service is always on.

  • How long do you persist my service?

    Until you manually remove it, we will persist your service as long as possible.

  • Is everything free?

    Yes! We just need your feedback - use jc survey to help us understand your needs.

  • How powerful is Jina Cloud?

    Jina Cloud scales according to your need. You can demand for the resources your Flow requires. If there's anything particular you'd be looking for, you can contact us on Slack or let us know via jc survey.

  • How can I enable verbose logs with jcloud?

    To make the output more verbose, you can add --loglevel DEBUG before each CLI subcommand, e.g.

    jc --loglevel DEBUG deploy toy.yml
    

Support

Join Us

JCloud is backed by Jina AI and licensed under Apache-2.0. We are actively hiring AI engineers, solution engineers to build the next neural search ecosystem in open-source.

Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jcloud-0.0.30.dev7.tar.gz (32.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page