We integrate Akash Network into your infrastructure to host AI inference (LLM, Stable Diffusion), blockchain nodes (Ethereum, Cosmos), DApp backends, and compute tasks on a decentralized cloud. Providers offer GPU/CPU power; clients manage workloads via SDL manifests; payment in AKT. Key advantage: support for standard Docker containers without custom runtime, simplifying migration of existing applications. Typical scenario: an ML team needs to deploy an inference server for Llama 3 on GPU, but AWS or GCP are expensive, and Kubernetes is overkill. Akash allows running the same Docker image on decentralized providers with savings up to 50% and full blockchain control.
How the SDL Manifest Works and Why It's Critical
Stack Definition Language (SDL) is a YAML format for describing deployments. It looks like docker-compose but has differences that can break deployment without preparation. Here's an example manifest for an inference server:
---
version: "2.0"
services:
inference-api:
image: your-org/llm-inference:sha256-abc123
expose:
- port: 8080
as: 80
to:
- global: true
env:
- MODEL_PATH=/models/llama-7b
- MAX_CONCURRENT=4
resources:
cpu:
units: 4.0
memory:
size: 16Gi
storage:
- size: 50Gi
attributes:
persistent: true
class: beta3
profiles:
compute:
inference-api:
resources:
cpu:
units: 4
memory:
size: 16Gi
gpu:
units: 1
attributes:
vendor: nvidia:
- model: rtx3090
placement:
dcloud:
pricing:
inference-api:
denom: uakt
amount: 1000
deployment:
inference-api:
dcloud:
profile: inference-api
count: 1
---
Akash Network Documentation highlights the importance of persistent: true for data surviving restarts. Without it, the container starts fresh when moved to another provider. Use class: beta3 (NVMe) for high IOPS — critical for ML models and databases.
SDL pitfalls:
- persistent storage — mandatory for data that must survive container restarts. Without it, ephemeral storage.
- Storage class —
beta3(NVMe) is significantly faster thanbeta2(HDD). IOPS difference is critical for DBs and ML models. - Image pinning — use digest (sha256) instead of
latesttag. Providers cache images, solatestmay differ. - GPU resources — not available on all providers. Specifying exact model (rtx3090, a100) narrows the pool but guarantees compatibility.
- Missing health check — deployment gets no IP, and you'll pay even for a non-working service.
- Wrong port expose — the application will be inaccessible externally.
How to Programmatically Deploy to Akash
For automation from your application, we use the Akash JavaScript SDK or direct REST API calls (Cosmos-based). Below is an example of creating a deployment via SDK:
import { Registry, DirectSecp256k1HdWallet } from "@cosmjs/proto-signing";
import { SigningStargateClient } from "@cosmjs/stargate";
import { MsgCreateDeployment } from "@akashnetwork/akash-api/akash/deployment/v1beta3";
const AKASH_RPC = "https://rpc.akashnet.net:443";
const AKASH_DENOM = "uakt";
async function createDeployment(sdlContent: string, walletMnemonic: string) {
const wallet = await DirectSecp256k1HdWallet.fromMnemonic(walletMnemonic, {
prefix: "akash",
});
const [account] = await wallet.getAccounts();
const client = await SigningStargateClient.connectWithSigner(AKASH_RPC, wallet, {
registry: new Registry(/* akash proto types */),
});
const dseq = Math.floor(Date.now() / 1000);
const msg = {
typeUrl: "/akash.deployment.v1beta3.MsgCreateDeployment",
value: MsgCreateDeployment.fromPartial({
id: {
owner: account.address,
dseq: BigInt(dseq),
},
groups: parseSDLGroups(sdlContent),
deposit: {
denom: AKASH_DENOM,
amount: "5000000"
},
}),
};
const result = await client.signAndBroadcast(
account.address,
[msg],
{
amount: [{ denom: AKASH_DENOM, amount: "20000" }],
gas: "800000"
}
);
return { dseq, txHash: result.transactionHash };
}After deployment creation, an auction starts: providers place bids, the client selects the best and creates a lease. This is an asynchronous process — you need to subscribe to blockchain events (WebSocket or polling).
async function watchBidsAndCreateLease(dseq: number, ownerAddress: string) {
const bids = await pollBids(dseq, ownerAddress, { timeoutMs: 120000 });
if (bids.length === 0) throw new Error("No bids received");
const bestBid = bids.sort((a, b) => Number(a.bid.price.amount) - Number(b.bid.price.amount))[0];
await createLease(bestBid.bid.bidId, wallet);
await sendManifestToProvider(bestBid.bid.bidId.provider, dseq, sdlContent);
} How to Manage the Deployment Lifecycle
After lease creation, the deployment is managed via the Provider Service API — HTTP endpoints of the provider. The endpoint is obtained from on-chain provider data.
async function getDeploymentStatus(providerAddress: string, dseq: number, owner: string) {
const providerInfo = await queryProviderInfo(providerAddress);
const providerHost = providerInfo.hostUri;
const response = await fetch(
`${providerHost}/lease/${owner}/${dseq}/1/1/status`,
{
headers: {
Authorization: `Bearer ${await getProviderToken()}`
}
}
);
return response.json();
}For production, we integrate monitoring via Prometheus/Grafana, running a sidecar container in the same deployment. We regularly check the deposit balance — when exhausted, the deployment terminates without recovery. To avoid this, we set up automatic refills.
Which Workloads Are Best Suited for Akash?
| Workload Type | Requirements | Recommendations |
|---|---|---|
| AI inference | GPU, persistent storage for models | Init-container for downloading, health check with 5–10 minute timeout |
| Blockchain nodes | 1+ TB persistent, UDP for P2P | Use snapshot bootstrap, specify proto: UDP in expose |
| Stateless backends | Minimal resources | Horizontal scaling via count, external load balancer |
| Databases | Persistent, I/O | Only with replication; critical data outside Akash |
Pricing and Cost Control
Cost is denominated in uAKT per block (~6 seconds). For pre-deployment estimation, use the Cloudmos API: send the SDL and get the price per block. Typical price for ML inference with RTX 3090 GPU is a few tens of cents per hour, offering significant savings compared to cloud providers. For production, we configure automatic deposit refills — otherwise the deployment shuts down without warning.
Comparison of Manual and Programmatic Deployment
| Method | Setup Time | Automation | Scaling |
|---|---|---|---|
| Manual (CLI) | 1–3 days | None | Manual |
| Programmatic (SDK) | 1–2 weeks | Full | Event-driven |
| Full (EVM integration) | 3–5 weeks | On-chain escrow | Via smart contract |
What's Included in the Work
- Analysis of your application and preparation of the SDL manifest
- Development of deployment scripts (CLI or programmatic integration)
- Monitoring and alerting setup
- Integration with EVM contracts (optional)
- Documentation and team training
- Post-launch support
Experience: 5+ years in Web3, 30+ projects in decentralized computing integration. We use Foundry, Cosmos SDK, and TypeScript.
Integration Timelines
- Basic (manual SDL, CLI) — 1 to 3 days
- Programmatic (automated deployment, monitoring) — 1 to 2 weeks
- Full (EVM contract, escrow, lifecycle) — 3 to 5 weeks
We'll evaluate your project within 1–2 business days. Contact us to discuss details. Get a consultation on Akash integration.







