aws-bootstrap-g4dn 0.1.0__py3-none-any.whl → 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aws_bootstrap/cli.py +109 -12
- aws_bootstrap/config.py +2 -0
- aws_bootstrap/ec2.py +3 -3
- aws_bootstrap/gpu.py +27 -0
- aws_bootstrap/resources/remote_setup.sh +7 -1
- aws_bootstrap/ssh.py +47 -47
- aws_bootstrap/tests/test_cli.py +315 -7
- aws_bootstrap/tests/test_gpu.py +98 -0
- aws_bootstrap/tests/test_ssh_config.py +36 -0
- aws_bootstrap/tests/test_ssh_gpu.py +1 -95
- {aws_bootstrap_g4dn-0.1.0.dist-info → aws_bootstrap_g4dn-0.3.0.dist-info}/METADATA +27 -5
- aws_bootstrap_g4dn-0.3.0.dist-info/RECORD +24 -0
- aws_bootstrap_g4dn-0.1.0.dist-info/RECORD +0 -22
- {aws_bootstrap_g4dn-0.1.0.dist-info → aws_bootstrap_g4dn-0.3.0.dist-info}/WHEEL +0 -0
- {aws_bootstrap_g4dn-0.1.0.dist-info → aws_bootstrap_g4dn-0.3.0.dist-info}/entry_points.txt +0 -0
- {aws_bootstrap_g4dn-0.1.0.dist-info → aws_bootstrap_g4dn-0.3.0.dist-info}/licenses/LICENSE +0 -0
- {aws_bootstrap_g4dn-0.1.0.dist-info → aws_bootstrap_g4dn-0.3.0.dist-info}/top_level.txt +0 -0
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aws-bootstrap-g4dn
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.0
|
|
4
4
|
Summary: Bootstrap AWS EC2 GPU instances for hybrid local-remote development
|
|
5
5
|
Author: Adam Ever-Hadani
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/promptromp/aws-bootstrap-g4dn
|
|
8
8
|
Project-URL: Issues, https://github.com/promptromp/aws-bootstrap-g4dn/issues
|
|
9
9
|
Keywords: aws,ec2,gpu,cuda,deep-learning,spot-instances,cli
|
|
10
|
-
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
13
|
+
Requires-Python: >=3.12
|
|
11
14
|
Description-Content-Type: text/markdown
|
|
12
15
|
License-File: LICENSE
|
|
13
16
|
Requires-Dist: boto3>=1.35
|
|
@@ -55,7 +58,7 @@ ssh aws-gpu1 # You're in, venv activated, PyTorch works
|
|
|
55
58
|
|
|
56
59
|
1. AWS profile configured with relevant permissions (profile name can be passed via `--profile` or read from `AWS_PROFILE` env var)
|
|
57
60
|
2. AWS CLI v2 — see [here](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
|
|
58
|
-
3. Python 3.
|
|
61
|
+
3. Python 3.12+ and [uv](https://github.com/astral-sh/uv)
|
|
59
62
|
4. An SSH key pair (see below)
|
|
60
63
|
|
|
61
64
|
## Installation
|
|
@@ -66,6 +69,16 @@ ssh aws-gpu1 # You're in, venv activated, PyTorch works
|
|
|
66
69
|
pip install aws-bootstrap-g4dn
|
|
67
70
|
```
|
|
68
71
|
|
|
72
|
+
### With uvx (no install needed)
|
|
73
|
+
|
|
74
|
+
[uvx](https://docs.astral.sh/uv/guides/tools/) runs the CLI directly in a temporary environment — no global install required:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
uvx --from aws-bootstrap-g4dn aws-bootstrap launch
|
|
78
|
+
uvx --from aws-bootstrap-g4dn aws-bootstrap status
|
|
79
|
+
uvx --from aws-bootstrap-g4dn aws-bootstrap terminate
|
|
80
|
+
```
|
|
81
|
+
|
|
69
82
|
### From source (development)
|
|
70
83
|
|
|
71
84
|
```bash
|
|
@@ -75,7 +88,7 @@ uv venv
|
|
|
75
88
|
uv sync
|
|
76
89
|
```
|
|
77
90
|
|
|
78
|
-
|
|
91
|
+
All methods install the `aws-bootstrap` CLI.
|
|
79
92
|
|
|
80
93
|
## SSH Key Setup
|
|
81
94
|
|
|
@@ -113,6 +126,12 @@ aws-bootstrap launch --on-demand --instance-type g5.xlarge --region us-east-1
|
|
|
113
126
|
# Launch without running the remote setup script
|
|
114
127
|
aws-bootstrap launch --no-setup
|
|
115
128
|
|
|
129
|
+
# Use a specific Python version in the remote venv
|
|
130
|
+
aws-bootstrap launch --python-version 3.13
|
|
131
|
+
|
|
132
|
+
# Use a non-default SSH port
|
|
133
|
+
aws-bootstrap launch --ssh-port 2222
|
|
134
|
+
|
|
116
135
|
# Use a specific AWS profile
|
|
117
136
|
aws-bootstrap launch --profile my-aws-profile
|
|
118
137
|
```
|
|
@@ -136,7 +155,7 @@ The setup script runs automatically on the instance after SSH becomes available:
|
|
|
136
155
|
|------|------|
|
|
137
156
|
| **GPU verify** | Confirms `nvidia-smi` and `nvcc` are working |
|
|
138
157
|
| **Utilities** | Installs `htop`, `tmux`, `tree`, `jq` |
|
|
139
|
-
| **Python venv** | Creates `~/venv` with `uv`, auto-activates in `~/.bashrc` |
|
|
158
|
+
| **Python venv** | Creates `~/venv` with `uv`, auto-activates in `~/.bashrc`. Use `--python-version` to pin a specific Python (e.g. `3.13`) |
|
|
140
159
|
| **CUDA-aware PyTorch** | Detects CUDA toolkit version → installs PyTorch from the matching `cu{TAG}` wheel index |
|
|
141
160
|
| **CUDA smoke test** | Runs `torch.cuda.is_available()` + GPU matmul to verify the stack |
|
|
142
161
|
| **GPU benchmark** | Copies `gpu_benchmark.py` to `~/gpu_benchmark.py` |
|
|
@@ -210,6 +229,9 @@ aws-bootstrap status
|
|
|
210
229
|
# Include GPU info (CUDA toolkit + driver version, GPU name, architecture) via SSH
|
|
211
230
|
aws-bootstrap status --gpu
|
|
212
231
|
|
|
232
|
+
# Hide connection commands (shown by default for each running instance)
|
|
233
|
+
aws-bootstrap status --no-instructions
|
|
234
|
+
|
|
213
235
|
# List instances in a specific region
|
|
214
236
|
aws-bootstrap status --region us-east-1
|
|
215
237
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
aws_bootstrap/__init__.py,sha256=kl_jvrunGyIyizdRqAP6ROb5P1BBrXX5PTq5gq1ipU0,82
|
|
2
|
+
aws_bootstrap/cli.py,sha256=H7Lud1PWk0O5zKGf1StARCEahrMErickuHXsWk42j3A,20481
|
|
3
|
+
aws_bootstrap/config.py,sha256=TeCOYDlijT-KD5SFIzc-VvBhOqcq9YCgen9NK63rka8,895
|
|
4
|
+
aws_bootstrap/ec2.py,sha256=LHpzW91ayK45gsWV_B4LanSZIhWggqTsL31qHUceiaA,12274
|
|
5
|
+
aws_bootstrap/gpu.py,sha256=WTnHR0s3mQHDlnzqRgqAC6omWz7nT5YtGpcs0Bf88jk,692
|
|
6
|
+
aws_bootstrap/ssh.py,sha256=RK5Ahiwpol9-4MUvurKyNa1JorQW9VkkNtSSfPzryrU,17851
|
|
7
|
+
aws_bootstrap/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
8
|
+
aws_bootstrap/resources/gpu_benchmark.py,sha256=2uoss2bZGhg7c3D7Hg1-EJlOVDtzAH4co1ahSvF_lVU,29080
|
|
9
|
+
aws_bootstrap/resources/gpu_smoke_test.ipynb,sha256=XvAOEIPa5H9ri5mRZqOdknmwOwKNvCME6DzBGuhRYfg,10698
|
|
10
|
+
aws_bootstrap/resources/remote_setup.sh,sha256=n1joNO-6EizLsz2BPOPruFhe90kEQ9Np2SBhYXnOJRs,5648
|
|
11
|
+
aws_bootstrap/resources/requirements.txt,sha256=gpYl1MFCfWXiAhbIUgAjuTHONz3MKci25msIyOkMmUk,75
|
|
12
|
+
aws_bootstrap/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
aws_bootstrap/tests/test_cli.py,sha256=vyoVVqSakC7Y2BCEFpyf2ghTUvT-QWBQC9-yvEFz3gw,32554
|
|
14
|
+
aws_bootstrap/tests/test_config.py,sha256=arvET6KNl4Vqsz0zFrSdhciXGU688bfsvCr3dSpziN0,1050
|
|
15
|
+
aws_bootstrap/tests/test_ec2.py,sha256=Jmqsjv973hxXbZWfGgECtm6aa2156Lzji227sYMBuMg,10547
|
|
16
|
+
aws_bootstrap/tests/test_gpu.py,sha256=rbMuda_sIVbaCzkWXoLv9YIfnWztgRoP7NuVL8XHrUY,3871
|
|
17
|
+
aws_bootstrap/tests/test_ssh_config.py,sha256=iQDd3hJ8to-2-QHW26Brtglfl0q0P6sCE6U_itxoNyY,11609
|
|
18
|
+
aws_bootstrap/tests/test_ssh_gpu.py,sha256=dRp86Og-8GqiATSff3rxhu83mBZdGgqI4UOnoC00Ln0,1454
|
|
19
|
+
aws_bootstrap_g4dn-0.3.0.dist-info/licenses/LICENSE,sha256=Hen77Mt8sazSQJ9DgrmZuAvDwo2vc5JAkR_avuFV-CM,1067
|
|
20
|
+
aws_bootstrap_g4dn-0.3.0.dist-info/METADATA,sha256=tfsBYTSqVQf8A46P22qwdFsb_ur-Ge57hQfuDaj0mgE,12417
|
|
21
|
+
aws_bootstrap_g4dn-0.3.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
22
|
+
aws_bootstrap_g4dn-0.3.0.dist-info/entry_points.txt,sha256=T8FXfOgmLEvFi8DHaFJ3tCzId9J3_d2Y6qT98OXxCjA,57
|
|
23
|
+
aws_bootstrap_g4dn-0.3.0.dist-info/top_level.txt,sha256=mix9gZRs8JUv0OMSB_rwdGcRnTKzsKgHrE5fyAn5zJw,14
|
|
24
|
+
aws_bootstrap_g4dn-0.3.0.dist-info/RECORD,,
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
aws_bootstrap/__init__.py,sha256=kl_jvrunGyIyizdRqAP6ROb5P1BBrXX5PTq5gq1ipU0,82
|
|
2
|
-
aws_bootstrap/cli.py,sha256=UVMCBOfTm1q7RxVDot5d3a8SSjLj9zevbvGgWamQDQQ,16134
|
|
3
|
-
aws_bootstrap/config.py,sha256=bOADtpujEacED0pu9m7D781UFlMhZrmtHQ7eqI6ySjk,834
|
|
4
|
-
aws_bootstrap/ec2.py,sha256=-yEyGMCycY4ccsmbgqHnLK2FRFWX2kr7nLfYWXSKeaY,12242
|
|
5
|
-
aws_bootstrap/ssh.py,sha256=-8F0PAkl7CCY1b9n46ZhWJ6faIMlSvA26BleeIp-rMA,17533
|
|
6
|
-
aws_bootstrap/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
7
|
-
aws_bootstrap/resources/gpu_benchmark.py,sha256=2uoss2bZGhg7c3D7Hg1-EJlOVDtzAH4co1ahSvF_lVU,29080
|
|
8
|
-
aws_bootstrap/resources/gpu_smoke_test.ipynb,sha256=XvAOEIPa5H9ri5mRZqOdknmwOwKNvCME6DzBGuhRYfg,10698
|
|
9
|
-
aws_bootstrap/resources/remote_setup.sh,sha256=FzpXEw-LvlXROi-PmO72yEyDWWi-3Tul6D7-vFDubXQ,5460
|
|
10
|
-
aws_bootstrap/resources/requirements.txt,sha256=gpYl1MFCfWXiAhbIUgAjuTHONz3MKci25msIyOkMmUk,75
|
|
11
|
-
aws_bootstrap/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
aws_bootstrap/tests/test_cli.py,sha256=4lvv1YqiaJ9_KnWqbDVWh2aH03by0liYvz6tx-hLj7k,18923
|
|
13
|
-
aws_bootstrap/tests/test_config.py,sha256=arvET6KNl4Vqsz0zFrSdhciXGU688bfsvCr3dSpziN0,1050
|
|
14
|
-
aws_bootstrap/tests/test_ec2.py,sha256=Jmqsjv973hxXbZWfGgECtm6aa2156Lzji227sYMBuMg,10547
|
|
15
|
-
aws_bootstrap/tests/test_ssh_config.py,sha256=Rt3e7B22d8kK0PzFgXB4gwpF4HvIseiqzcpouCwMo5M,10333
|
|
16
|
-
aws_bootstrap/tests/test_ssh_gpu.py,sha256=W6GQzILCy_qPrvWQlCC8Ris-vuTzTGiyNXEyMzwD1kM,5154
|
|
17
|
-
aws_bootstrap_g4dn-0.1.0.dist-info/licenses/LICENSE,sha256=Hen77Mt8sazSQJ9DgrmZuAvDwo2vc5JAkR_avuFV-CM,1067
|
|
18
|
-
aws_bootstrap_g4dn-0.1.0.dist-info/METADATA,sha256=FT4d1jH8ANZ_Kfc_5VXt6jMEFIHsIJ2PzeyU3UnXHA0,11596
|
|
19
|
-
aws_bootstrap_g4dn-0.1.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
20
|
-
aws_bootstrap_g4dn-0.1.0.dist-info/entry_points.txt,sha256=T8FXfOgmLEvFi8DHaFJ3tCzId9J3_d2Y6qT98OXxCjA,57
|
|
21
|
-
aws_bootstrap_g4dn-0.1.0.dist-info/top_level.txt,sha256=mix9gZRs8JUv0OMSB_rwdGcRnTKzsKgHrE5fyAn5zJw,14
|
|
22
|
-
aws_bootstrap_g4dn-0.1.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|