Environments
Access AWS from local machine
First and foremost, add AWS access keys to env variables to local machine, ideally in ~/.zsh
(or whatver your $SHELL is).
export AWS_ACCESS_KEY_ID="..."
export AWS_SECRET_ACCESS_KEY="..."
these can be found in the AWS console under IAM -> Users -> Security credentials.
Start/stop an instance
aws ec2 start-instances --instance-ids i-0a92dcb7d252071c5
aws ec2 stop-instances --instance-ids i-0a92dcb7d252071c5
or via IP address:
aws ec2 start-instances --instance-ids $(aws ec2 describe-instances --filters "Name=ip-address,Values=54.151.70.169" --query 'Reservations[*].Instances[*].InstanceId' --output text)
aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances --filters "Name=ip-address,Values=54.151.70.169" --query 'Reservations[*].Instances[*].InstanceId' --output text)
ssh and connect
Optionally, create and assign elastic IP to the instance (cost is $3.5 per month) for easier access.
If you have a pem key you can just log in with:
ssh -i my-aws-gpu-machine.pem ubuntu@54.151.70.169
or if you make a ~/.ssh/config file like this:
Host my-aws-gpu-instance
HostName 54.151.70.169
User ubuntu
IdentityFile ~/.ssh/my-aws-gpu-instance.pem # if you lose this you can use the trick below
then just ssh my-aws-gpu-instance
.
If you happen to lose pem file, just: - create a key pair run this on LOCAL machine (skip this if already exists and just copy it: cat ~/.ssh/id_rsa.pub
) bash ssh-keygen -t rsa -b 4096 -C "<pick a name of a machine you are running this command on>"
- log into remote machine using ec2 instance connect - copy LOCAL public key to authorized_keys
: echo public_key_string >> ~/.ssh/authorized_keys
or use nano
editor. - change permissions on REMOTE machine: bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Change shell prompt appearance
Open ~/.bashrc
and add the following lines:
# Function to get public IP address
get_public_ip() {
curl -s ifconfig.me
}
# Set the PROMPT variable to include the public IP address
PROMPT='%n@$(get_public_ip) %~ %# '
Access via VSCode
On the left just add remote instance, or Cmd+Shift+P and type Remote-SSH: Connect to Host...
and type ssh my-aws-gpu-instance
.
Add github access
Take a public key from any machine and copy/paste into GitHub - Settings - SSH and GPG keys - New SSH key.
Anything GPU
To see recommended drivers:
sudo apt install ubuntu-drivers-common
ubuntu-drivers devices
for T4 GPU, the recommended driver is 440. To install the latest driver, run the following commands:
sudo apt update
sudo apt-get upgrade # conservative upgrade
sudo apt-get dist-upgrade # aggressive upgrade, be careful
sudo apt install nvidia-driver-545
sudo reboot # don't forget to reboot, might even need to purge old drivers via `sudo apt-get purge nvidia-driver-XXX`
You can now see stats:
lspci | grep -i nvidia
nvidia-smi
you should see something like this:
NVIDIA-SMI 545.29.06 Driver Version: 545.29.06 CUDA Version: 12.3
Install any pyenv and python
You do this only once:
# Install pyenv prerequisites
sudo apt update
sudo apt install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
\
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev
xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
# Install pyenv
curl https://pyenv.run | bash
# Add pyenv to the shell
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
# Install Python 3.10.14
pyenv install 3.10.14
Set global Python version:
pyenv global 3.10.14
or local:
pyenv local 3.10.14
Also have option to add to the PYTHONPATH:
export PYTHONPATH=$PYTHONPATH:$PWD
github username can also come handy:
export GITHUB_USERNAME="nesaboz"
Install AWS CLI
sudo apt install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
source ~/.bashrc
rm awscliv2.zip
aws --version
aws-cli/2.15.41 Python/3.11.8 Linux/6.5.0-1018-aws exe/x86_64.ubuntu.22 prompt/off
Install virtual env in a project
pyenv local 3.10.14 # set up the local
python -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
deactivate
to install specific version of a package:
pip install example-package==2.0.1
pip install pip-tools
pip freeze > requirements.txt # better is to use pip-compile
pip-compile requirements.in
pip-compile --output-file dev.txt requirements.in # if you want different name
requirements file uses == for versions
Encode time zone
echo "export TZ='PST8PDT'" >> ~/.bashrc
If you must get Conda
Get mamba which is a faster version of conda
from here:
wget https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge-Linux-x86_64.sh
or just get miniconda
:
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.3.1-0-Linux-x86_64.sh
Install it via:
source <file you want to run>.sh
Update mamba/conda:
conda update -n base -c conda-forge conda
Init conda:
conda init zsh # Must restart terminal if running this one.
Note for Windows
Install WSL for Windows:
wsl --install Ubuntu
will need to add both conda and mamba to PATH by editing ~/.bashrc
file and adding these two lines to the end:
source "${CONDA PATH}/etc/profile.d/conda.sh"
source "${CONDA PATH}/etc/profile.d/mamba.sh"
Also to set up default terminal in VSCode follow quick instructions here.
Windows C hard drive will be by default mounted in /mnt/c/
folder.
Use PowerToys/Keyboard Manager to remap the keyboard.
Create environment
Create environment with env.yml
or from scratch:
conda create -f env.yml -n custom name # notice there is no keyword env
yes | conda create -n repo_name python=python_ver
conda activate repo_name
deactivate
Environment management
conda env list # list all envs
conda env remove -n ENV_NAME
conda list torch # lists only package version
Install packages
yes | conda install -c conda-forge jupyter_contrib_nbextensions graphviz python-graphviz
Export environment
Alternatively, export environment to a file:
conda env export > env.yml
or if it is cross-platform export simpler no-build number environment:
conda env export --no-builds | grep -v "prefix" > env.yml
Jupyter kernels
Add a kernel:
ipython kernel install --name $repo_name --user
Using bash script
- If making shell file make sure it has correct line endings for the system (for example in PyCharm go to File -> File Properties -> Line Separators)
Make sure the file is executable:
chmod +x utils/setup_new_project.sh check with ls -l
./utils/setup_new_project.sh <repo_name> <python_version>
# for example ./setup_new_project.sh test_repo 3.10
To stop execution after a failure use || exit
, for example if the folder doesn’t exist following command will stop the script:
cd $repo_name || exit
VS Code Extensions
Python, Jupyter, autoDocstring, Code Spell Checker, Dev Containers.