Best Practices(?): common tactics for server setups & data storage - Deep Learning: Getting Started - DeepTalk - Deep Learning Community

Best Practices(?): common tactics for server setups & data storage

post by JimVincent on Feb 19, 2023

Hey guys,

I would like to know what type of setup would be recommended for developing code with the use of on-demand servers that delete all files once they are terminated.

My current mission: develop some computer vision code/ model for an app.

My Machine: MacBook Pro M1

What I need: Develop and test my code (e.g. with notebooks) and test other cv repos & frameworks (mostly shell).

What Is my problem: because we are a small startup and we yet have to apply for aws activate, we dont have an S3 storage or a similar solution. The dataset is on my local machine, but for the lack of a NVIDIA card I cant properly install dependencies or frameworks that require cuda, so developing and prototyping on my MacBook is shit.

So I need the server and would theoretically need to set up the whole server every time I start up but also fetch the code and dataset.

My question is:

what solutions, types of scripts, usual approaches would help me out here?

Right now I am thinking of a shell scripts that once the instance is running sets up the necessary installs I need (e.g. Pycharm SSH plugin, conda) and clones my project from GitHub (for the current task the dataset is small enough to be posted to GitHub). Once I am done developing for the day I update the dependency and server setup files (pip or conda freezes) and push the code.

Is this the best/ a good setup for now? Are there any popular ways that I am missing? What is this process called?

Is docker perfect for this use or the wrong thing? How do you guys do it?.. (except with AWS, Azure, GCP because deep diving into their ecosystems is not feasible right now (I am very happy about the easy of use of lambda instances)).

Happy to hear from you guys!

post by comodoro on May 24, 2023

Hi,

I would think this very much depends on the circumstances. In my case, I have spent some time on a setup script, only to realize I would have to downgrade CUDA (I need 10.0). I have a Docker image that works out of the box, so I switched to that, accepting the small overhead, I’ve read somewhere that it is around 1%.

For prototyping, however, I would think a local GPU has many advantages, like one-off setup, no data transfer and one-time cost, I would definitely look into external graphics cards, however I don’t know if it is possible on a Mac. And docker as well, there are plenty prebuilt images with major frameworks.

post by yanos on May 24, 2023

Hello @JimVincent and @comodoro!

Here is a simple way to deploy your software stack on the Lambda Cloud using Ansible.

eg. create “ready_to_work.yml”

---
# you can run this as follows:
# ansible-playbook --ssh-common-args='-o StrictHostKeyChecking=no' ready_to_work.yml -i lambda_cloud_instance_ip,
# DON'T FORGET THE , IN THE END!
# eg. ansible-playbook --ssh-common-args='-o StrictHostKeyChecking=no' ready_to_work.yml -i 10.0.0.2,
- hosts: all
  remote_user: ubuntu
  vars:
      ansible_ssh_private_key_file: "~/.ssh/your-private-ssh-key-for-lambda-instances"
      github_username: put_username_here
      github_token: put_password_here
      github_repo: put_repo_name_here
  tasks:
  # Here, we use the variables set above
  # We clone the repo to the home directory of the user
  - name: Checkout Your Code From Github Using Ansible.
    git:
      repo: "https://{{ github_token }}@github.com/{{ github_username }}/{{ github_repo }}.git"
      dest: "~/{{ github_repo }}"

- name: Install apt packages
    ansible.builtin.apt:
      name: "{{ item }}"
      state: present
      update_cache: yes
    loop:
      - package1
      - package2

- name: Install pip packages
    ansible.builtin.pip:
      name: "{{ item }}"
    loop:
      - package1
      - package2

# Or start a Docker container
  - name: Start Docker container
    docker_container:
        name: mycontainer
        state: present
        image: ubuntu:22.04
        command: sleep infinity

You can also create a bash script to check if the Lambda instance has booted (by checking if port 22 is active) and then run the ansible script on it.

Create bash_script.sh

until nc -vzw 2 $1 22; do sleep 2; done
ansible-playbook --ssh-common-args='-o StrictHostKeyChecking=no' ready_to_work.yml -i $1,

Run it like this: $ bash bash_script.sh <instance_ip>

Best, Yanos