2024-04-11 12:37:58 -07:00
# PyPantograph
2024-04-19 16:47:35 -07:00
2024-04-11 12:37:58 -07:00
Python interface to the Pantograph library
2024-04-19 16:47:35 -07:00
## Getting started
2024-04-29 12:23:28 -07:00
First initialize the git submodules so that git can keep track of the submodules being used do:
```bash
# - initialize the git submodules by preparing the git repository, but it does not clone or fetch them, just init's git's internal configs
git submodule init
```
Then to clone, fetch & update the submodules code (and also initilize anything you might have forgotten that is specificed in the `.gitmodules` file):
```bash
# - initialize the git submodules so that git can track them and then the update clone/fetches & updates the submodules
git submodule update --init
```
2024-04-29 18:30:50 -07:00
Then install poetry by (e.g., [by following poetry's official instructions ](https://python-poetry.org/docs/#installing-manually )).
2024-04-29 12:23:28 -07:00
Then once you confirm you have poetry & the initialized git submodules, execute:
2024-04-19 16:47:35 -07:00
```bash
poetry build
```
2024-04-22 22:59:29 -07:00
To run server tests:
2024-04-19 16:47:35 -07:00
``` bash
python -m pantograph.server
```
2024-04-22 22:59:29 -07:00
The tests in `pantograph/server.py` also serve as simple interaction examples
2024-04-19 16:47:35 -07:00
2024-04-29 18:30:50 -07:00
## Install 1: With Conda and Pip in the SNAP cluster
2024-04-29 12:23:28 -07:00
```bash
2024-04-29 18:30:50 -07:00
# - Install Lean4 manually (elan and lake), 1st one is the SNAP one, 2nd is the most common one
2024-04-29 12:23:28 -07:00
curl -sSf https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s -- -y
2024-04-29 18:30:50 -07:00
# curl -sSf https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s
2024-04-29 12:23:28 -07:00
2024-04-29 18:30:50 -07:00
# - Make sure Lean4 tools (lean, lake) are available
2024-04-29 12:53:54 -07:00
export PATH="$HOME/.elan/bin:$PATH"
echo 'export PATH="$HOME/.elan/bin:$PATH"' >> ~/.bashrc
bash
elan
lake
2024-04-29 18:30:50 -07:00
# - Create and activate the right python env (this is needed so that poetry build works)
2024-04-29 12:23:28 -07:00
conda create -n pypantograph_env python=3.11 -y
conda activate pypantograph_env
2024-04-29 18:30:50 -07:00
#conda remove --name pypantograph_env --all
2024-04-29 12:23:28 -07:00
2024-04-29 18:30:50 -07:00
# - Install poetry with python venv (needs seperate install so poetry & your projs deps don't crash)
2024-04-29 12:53:54 -07:00
mkdir $HOME/.virtualenvs
2024-04-29 18:30:50 -07:00
# put the follow BEFORE your conda init stuff in your .bashrc
2024-04-29 12:53:54 -07:00
export VENV_PATH=$HOME/.virtualenvs/venv_for_poetry
export PATH="$VENV_PATH/bin:$PATH"
2024-04-29 18:30:50 -07:00
# now actually install poetry in a python env after creating an python env for poetry with venv
2024-04-29 12:53:54 -07:00
python3 -m venv $VENV_PATH
$VENV_PATH/bin/pip install -U pip setuptools
$VENV_PATH/bin/pip install poetry
poetry
2024-04-29 18:30:50 -07:00
# - Init the git submodules (i.e., make git aware of them/track them) + fetch/clone/update (and double check submodule is inited)
git submodule init
git submodule update --init
# - For snap make sure the repo is sym linked you're using your
git clone git@github.com:lenianiva/PyPantograph.git
git checkout < your-branch >
2024-04-29 12:53:54 -07:00
ln -s $AFS/PyPantograph $HOME/PyPantograph
2024-04-29 18:30:50 -07:00
# - Build the PyPantograph proj (build the py distribution, py deps and custom (lean4) installs). Note: pip install -e doesn't work on the dist .whl builds etc so you instead the next command
2024-04-29 12:23:28 -07:00
cd $HOME/PyPantograph
poetry build
2024-04-29 18:30:50 -07:00
# - Install pypantograph in editable mode (only pyproject.toml (or setup.py!) needed! Assuming your at the proj root)
cd $HOME/PyPantograph
2024-04-29 12:23:28 -07:00
pip install -e .
2024-04-29 18:30:50 -07:00
# - Confirm intalls
2024-04-29 12:23:28 -07:00
pip list | grep pantograph
pip list | grep vllm
2024-04-29 12:53:54 -07:00
pip list | grep torch
2024-04-29 18:30:50 -07:00
# - Select freeiest GPU wrt vRAM
2024-04-29 12:53:54 -07:00
export CUDA_VISIBLE_DEVICES=$(nvidia-smi --query-gpu=memory.used --format=csv,nounits,noheader | awk '{print NR-1 " " $1}' | sort -nk2 | head -n1 | cut -d' ' -f1)
echo $CUDA_VISIBLE_DEVICES
2024-04-29 12:23:28 -07:00
2024-04-29 18:30:50 -07:00
# - Make sure the PyPantrograph server tests by Leni work
cd ~/PyPantograph
# python -m pantograph.server
2024-04-29 12:53:54 -07:00
python $HOME/PyPantograph/pantograph/server.py
python $HOME/PyPantograph/test_vllm.py
2024-04-29 12:23:28 -07:00
```
2024-04-29 18:30:50 -07:00
Note: the tests in `pantograph/server.py` also serve as simple interaction examples
References:
- My SNAP `.bashrc` : https://github.com/brando90/snap-cluster-setup/blob/main/.bashrc
- Especially useful for Conda vs Poetry export order
- Poetry in SNAP: https://github.com/brando90/snap-cluster-setup?tab=readme-ov-file#poetry
- Gitsubmodules: https://github.com/brando90/snap-cluster-setup?tab=readme-ov-file#git-submodules
- Lean in SNAP: https://github.com/brando90/snap-cluster-setup?tab=readme-ov-file#lean-in-snap
- ChatGPT: https://chat.openai.com/c/e01336a7-6f67-4cd2-b6cd-09b8ee8aef5a
# Install 2: With only Poetry in the SNAP cluster
```bash
# - Install Lean4 manually (elan and lake), 1st one is the SNAP one, 2nd is the most common one
curl -sSf https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s -- -y
# curl -sSf https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh | sh -s
# - Make sure Lean4 tools (lean, lake) are available
export PATH="$HOME/.elan/bin:$PATH"
echo 'export PATH="$HOME/.elan/bin:$PATH"' >> ~/.bashrc
bash
elan
lake
# - Init the git submodules (i.e., make git aware of them/track them) + fetch/clone/update (and double check submodule is inited)
git submodule init
git submodule update --init
# - For snap make sure the repo is sym linked you're using your
git clone git@github.com:lenianiva/PyPantograph.git
git checkout < your-branch >
ln -s $AFS/PyPantograph $HOME/PyPantograph
# - Install poetry with python venv (needs seperate install so poetry & your projs deps don't crash)
mkdir $HOME/.virtualenvs
# - Put the follow BEFORE your conda init stuff in your .bashrc
export VENV_PATH=$HOME/.virtualenvs/venv_for_poetry
export PATH="$VENV_PATH/bin:$PATH"
# - Now actually install poetry in a python env after creating an python env for poetry with venv
python3 -m venv $VENV_PATH
$VENV_PATH/bin/pip install -U pip setuptools
$VENV_PATH/bin/pip install poetry
poetry
# poetry build is only needed when you build a python distribution e.g., .whl or .tar.gz and want to distribute it. You can't use those files for edtiable development anyway
# # - Build the PyPantograph proj (build the py distribution, py deps and custom (lean4) installs)
# cd $HOME/PyPantograph
# poetry build
# - Install pypantograph in editable mode with poetry
#Installs the project and its dependencies into the virtual environment, creating the environment if it doesn't exist, in editable mode. This will run our custom build for Lean already (the build.py file!)
poetry install
# if it create a new python env, check it out
poetry env list
# activate the current poetry env in a new shell
poetry shell
# - Confirm intalls
# poetry show | grep pantograph # note, doesn't do anything since poetry already only works by installing things in editable mode
poetry show | grep vllm
poetry show | grep torch
# - Select freeiest GPU wrt vRAM
export CUDA_VISIBLE_DEVICES=$(nvidia-smi --query-gpu=memory.used --format=csv,nounits,noheader | awk '{print NR-1 " " $1}' | sort -nk2 | head -n1 | cut -d' ' -f1)
echo $CUDA_VISIBLE_DEVICES
# - Make sure the PyPantrograph server tests by Leni work
cd ~/PyPantograph
# python -m pantograph.server
python $HOME/PyPantograph/pantograph/server.py
python $HOME/PyPantograph/test_vllm.py
```