用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/UltronCore/claude-skill-vault --skill modal-gpu命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Validate environment configuration files across local, staging, and production environments. Ensure required secrets, database URLs, API keys, and public variables are properly scoped and set. Use this skill when setting up environments, validating configuration, checking for missing secrets, auditing environment variables, ensuring proper scoping of public vs private vars, or troubleshooting environment issues. Trigger terms include env, environment variables, secrets, configuration, .env file, environment validation, missing variables, config check, NEXT_PUBLIC, env vars, database URL, API keys.
Validate environment configuration files across local, staging, and production environments. Ensure required secrets, database URLs, API keys, and public variables are properly scoped and set. Use this skill when setting up environments, validating configuration, checking for missing secrets, auditing environment variables, ensuring proper scoping of public vs private vars, or troubleshooting environment issues. Trigger terms include env, environment variables, secrets, configuration, .env file, environment validation, missing variables, config check, NEXT_PUBLIC, env vars, database URL, API keys.
Build Raycast extensions using the Raycast API: commands, list views, forms, and preferences. Triggers on: Raycast, @raycast/api, raycast extension, raycast command, showToast, List.Item, Action.
正在显示 SKILL.md
基于 SOC 职业分类
| name | modal-gpu |
| description | Serverless GPU compute for ML workloads — run training, inference, and batch jobs on Modal |
| version | 1.0.0 |
| tags | ["gpu","serverless","ml","inference","training","cloud","python"] |
Modal is a serverless cloud platform purpose-built for ML and data workloads. You write Python functions decorated with @app.function() and Modal handles containerization, GPU provisioning, autoscaling, and cold starts. Pay per second of compute with no idle costs. Excellent for inference endpoints, training jobs, batch processing, and scheduled ML pipelines. Supports A10G, A100, H100 GPUs with sub-second cold starts on pre-warmed containers.
GitHub: https://github.com/modal-labs/modal-client (5k+ stars) Docs: https://modal.com/docs
pip install modal
# Authenticate
modal setup
# Or: modal token new
import modal
app = modal.App("gpu-hello-world")
@app.function(gpu="A10G")
def run_on_gpu():
import torch
device = torch.device("cuda")
x = torch.randn(1000, 1000, device=device)
result = (x @ x.T).sum().item()
return f"GPU compute result: {result:.2f}, GPU: {torch.cuda.get_device_name(0)}"
@app.local_entrypoint()
def main():
result = run_on_gpu.remote()
print(result)
import modal
app = modal.App("llm-inference")
# Build a custom image with model weights cached at build time
image = (
modal.Image.debian_slim(python_version="3.11")
.pip_install("transformers", "torch", "accelerate")
.run_function(
lambda: __import__("transformers").pipeline(
"text-generation",
model="microsoft/phi-2",
device_map="auto",
)
)
)
@app.cls(
gpu="A10G",
image=image,
container_idle_timeout=300, # Keep warm for 5 minutes
)
class LLMInference:
@modal.enter()
def load_model(self):
from transformers import pipeline
self.pipe = pipeline(
"text-generation",
model="microsoft/phi-2",
device_map="auto",
)
@modal.method()
def generate(self, prompt: str, max_new_tokens: int = 200) -> str:
result = self.pipe(prompt, max_new_tokens=max_new_tokens)
return result[0]["generated_text"]
@app.local_entrypoint()
def main():
model = LLMInference()
response = model.generate.remote()
(response)
import modal
from fastapi import FastAPI
app = modal.App("embedding-api")
web_app = FastAPI()
image = modal.Image.debian_slim().pip_install("sentence-transformers", "fastapi")
@app.cls(
gpu="A10G",
image=image,
container_idle_timeout=600,
)
@modal.asgi_app()
class EmbeddingService:
@modal.enter()
def load_model(self):
from sentence_transformers import SentenceTransformer
self.model = SentenceTransformer("BAAI/bge-small-en-v1.5")
def fastapi_app(self):
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class EmbedRequest(BaseModel):
texts: list[str]
@app.post("/embed")
async def embed(req: EmbedRequest):
embeddings = self.model.encode(req.texts).tolist()
return {"embeddings": embeddings}
return app
# Deploy: modal deploy embedding_service.py
import modal
app = modal.App("batch-embeddings")
image = modal.Image.debian_slim().pip_install("sentence-transformers")
@app.function(gpu="A10G", image=image)
def embed_batch(texts: list[str]) -> list[list[float]]:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-base-en-v1.5")
return model.encode(texts).tolist()
@app.local_entrypoint()
def main():
# Load 10,000 texts
all_texts = [f"Document {i}" for i in range(10_000)]
# Split into batches of 256
batch_size = 256
batches = [all_texts[i:i+batch_size] for i in range(0, len(all_texts), batch_size)]
# Run all batches in parallel on separate GPU instances
all_embeddings = []
for batch_result in embed_batch.map(batches, order_outputs=True):
all_embeddings.extend(batch_result)
print(f"Embedded {len(all_embeddings)} documents")
import modal
app = modal.App("finetune-job")
# Persistent volume for storing checkpoints
volume = modal.Volume.from_name("finetune-checkpoints", create_if_missing=True)
image = (
modal.Image.debian_slim()
.pip_install("transformers", "torch", "peft", "datasets", "accelerate")
)
@app.function(
gpu="H100",
image=image,
volumes={"/checkpoints": volume},
timeout=3600, # 1-hour timeout
)
def finetune():
from transformers import AutoModelForCausalLM, AutoTokenizer, TrainingArguments, Trainer
from peft import LoraConfig, get_peft_model
from datasets import load_dataset
model_name = "meta-llama/Llama-3.2-1B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto")
config = LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj", "v_proj"])
model = get_peft_model(model, config)
dataset = load_dataset("tatsu-lab/alpaca", split="train[:1000]")
args = TrainingArguments(
output_dir="/checkpoints/lora-llama",
num_train_epochs=1,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
save_steps=100,
)
trainer = Trainer(model=model, args=args, train_dataset=dataset)
trainer.train()
print("Training complete. Checkpoints saved to /checkpoints/")
():
finetune.remote()
import modal
app = modal.App("daily-embeddings")
image = modal.Image.debian_slim().pip_install("sentence-transformers", "requests")
@app.function(
gpu="A10G",
image=image,
schedule=modal.Cron("0 2 * * *"), # Run at 2am daily
)
def daily_embed_new_documents():
import requests
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("BAAI/bge-base-en-v1.5")
# Fetch new documents from your API
docs = requests.get("https://api.yourapp.com/new-docs").json()
embeddings = model.encode([d["text"] for d in docs])
# Save back to your vector store
# ...
print(f"Embedded {len(docs)} new documents")
container_idle_timeout and keep_warm for latency-sensitive endpointsrun_function() are cached — but first build is slow; pre-build images separatelymodal.Secret.from_name() for API keys, not environment variables in codetimeout= explicitly for long training jobsvllm-serving — deploy vLLM on Modal for high-throughput LLM inferencepeft-fine-tuning — LoRA/QLoRA patterns that run well on Modalunsloth — fast fine-tuning library optimized for Modal's H100sray-distributed-computing — alternative for multi-node distributed trainingserverless-patterns — general serverless architecture patternstool: modal-gpu
category: ml-infrastructure
tier: platform
interface: python-sdk
platform: cloud
stars: 5000+