gitarsenal-cli 1.5.6 → 1.5.8

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.
@@ -0,0 +1,80 @@
1
+ import subprocess
2
+ import time
3
+ import modal
4
+
5
+ app = modal.App()
6
+
7
+ # Use NVIDIA CUDA development image with full toolkit including nvcc
8
+ cuda_version = "12.8.1" # should be no greater than host CUDA version
9
+ flavor = "devel" # includes full CUDA toolkit with nvcc
10
+ operating_sys = "ubuntu24.04"
11
+ tag = f"{cuda_version}-{flavor}-{operating_sys}"
12
+
13
+ image = (
14
+ modal.Image.from_registry(f"nvidia/cuda:{tag}", add_python="3.12")
15
+ .entrypoint([]) # remove verbose logging by base image on entry
16
+ .apt_install("openssh-server", "vim", "nano", "htop", "git") # SSH and useful tools
17
+ .run_commands("mkdir -p /run/sshd") # SSH daemon requires this directory
18
+ .add_local_file("~/.ssh/id_rsa.pub", "/root/.ssh/authorized_keys", copy=True)
19
+ .run_commands("chmod 700 /root/.ssh && chmod 600 /root/.ssh/authorized_keys")
20
+ )
21
+
22
+ @app.function(
23
+ image=image,
24
+ gpu="any", # Request GPU access
25
+ timeout=3600, # Keep alive for 1 hour
26
+ cpu=2,
27
+ memory=8192
28
+ )
29
+ def start_cuda_container():
30
+ """
31
+ Start a CUDA container with nvcc compiler and SSH access.
32
+ """
33
+
34
+ # Start SSH daemon
35
+ print("Starting SSH daemon...")
36
+ subprocess.Popen(["/usr/sbin/sshd", "-D", "-e"])
37
+
38
+ # Verify CUDA installation
39
+ print("Verifying CUDA installation...")
40
+ try:
41
+ nvcc_output = subprocess.check_output(["nvcc", "--version"], text=True)
42
+ print("NVCC version:")
43
+ print(nvcc_output)
44
+ except Exception as e:
45
+ print(f"Error checking nvcc: {e}")
46
+
47
+ try:
48
+ nvidia_smi_output = subprocess.check_output(["nvidia-smi"], text=True)
49
+ print("GPU status:")
50
+ print(nvidia_smi_output)
51
+ except Exception as e:
52
+ print(f"Error checking nvidia-smi: {e}")
53
+
54
+ # Set up port forwarding for SSH
55
+ with modal.forward(port=22, unencrypted=True) as tunnel:
56
+ hostname, port = tunnel.tcp_socket
57
+ connection_cmd = f'ssh -p {port} root@{hostname}'
58
+
59
+ print("=" * 60)
60
+ print("🚀 CUDA Container Ready!")
61
+ print("=" * 60)
62
+ print(f"SSH into container: {connection_cmd}")
63
+ print(f"Hostname: {hostname}")
64
+ print(f"Port: {port}")
65
+ print("=" * 60)
66
+ print("Available tools:")
67
+ print("- nvcc (CUDA compiler)")
68
+ print("- nvidia-smi (GPU monitoring)")
69
+ print("- vim, nano, git, htop")
70
+ print("- Python 3.12")
71
+ print("=" * 60)
72
+
73
+ # Keep the container alive
74
+ print("Container running for 1 hour...")
75
+ time.sleep(3600)
76
+
77
+ # Start the container immediately
78
+ if __name__ == "__main__":
79
+ print("Starting CUDA container with nvcc...")
80
+ start_cuda_container.remote()