Cisco Deep Time Series Model on- premises installation
The Cisco Deep Time Series Model (CDTSM) is a pretrained, generative AI model designed for forecasting metric time series data across the Splunk platform. For more information on CDTSM including use cases, syntax, and parameters, see Feature preview: Cisco Deep Time Series Model.
POST http://<hostname>:8080/cdtsm/v1/ai/infer
| apply CDTSM runs, the AI Toolkit sends the time-series payload to the local model server and receives the forecast back.
Preview disclaimer
Beta features described in this document are provided by Splunk to you "as is" without any warranties, maintenance and support, or service-level commitments. Splunk makes this Beta feature available at its sole discretion and may discontinue it at any time. Use of Beta features is subject to the Splunk Pre-Release Agreement for Hosted Services.
Prerequisites
See the following table for the prerequisites to self-install the feature preview Cisco Deep Time Series Model (CDTSM):
| Requirement | Notes |
|---|---|
| Splunk Enterprise or Splunk Cloud with AI Toolkit | The AI Toolkit app must be installed at $SPLUNK_HOME/etc/apps/Splunk_ML_Toolkit. |
| Docker and Docker Compose | Docker Desktop is the easiest option. GPU is recommended for performance but is not required. The server runs on CPU as well. |
| Network access | Required for the first model download.
Model weights (~1 GB) are fetched from Hugging Face (cisco-ai/cisco-time-series-model-1.0) when the service first loads. After the initial download the weights are cached in a Docker named volume (hf_cache) and no further internet access is needed.
If your server does not have internet access, see the Installing on air-gapped or restricted-network servers section before proceeding. |
Installation steps
Complete these steps to connect a self-hosted CDTSM server to the Splunk AI Toolkit.
-
Get the server files. Only clone the
servefolder from the Cisco time-series model repository.CODEgit clone --depth 1 --sparse https://github.com/splunk/cisco-time-series-model.git cd cisco-time-series-model git sparse-checkout set serve cd serve -
Set a user-defined bearer token. Create one token. Use this same value in both the model server and Splunk encrypted storage.
CODEexport CDTSM_AUTH_TOKEN=$(openssl rand -hex 32) -
Put the token in the server
.env. The FastAPI server reads the token from .env before Docker starts.CODEprintf "CDTSM_AUTH_TOKEN=%s\n" "$CDTSM_AUTH_TOKEN" > .env -
Start CDTSM with Docker.
-
Build and launch the local FastAPI inference service on port 8080:CODE
docker compose up --build -
In a new terminal, wait until the model is ready:CODE
curl http://127.0.0.1:8080/readyNote:/readyreturns 503 while the model weights are downloading and loading. This is normal on first start. Poll until it returns 200.
-
-
Update the AI Toolkit mlspl.conf file. Edit $SPLUNK_HOME/etc/apps/Splunk_ML_Toolkit/local/mlspl.conf and add the following stanza:CODE
[CTSM] self_hosted_cdtsm_endpoint = http://<hostname>:8080/cdtsm/v1/ai/infer self_hosted_cdtsm_timeout = 300 self_hosted_cdtsm_model = CDTSMCAUTION: Do not edit the default/mlspl.conf file for any permanent changes. Always use local/mlspl.conf so any app upgrades do not overwrite your settings. -
Register the token with Splunk. The AI Toolkit reads the bearer token from Splunk encrypted storage passwords, not from mlspl.conf. Register the token as follows:CODE
$SPLUNK_HOME/bin/splunk _internal call \ /servicesNS/nobody/Splunk_ML_Toolkit/storage/passwords \ -method POST \ -post:realm aitk_fm_tokens \ -post:name CDTSM_AUTH_TOKEN \ -post:password "$CDTSM_AUTH_TOKEN" -
Restart and test.
-
Restart Splunk to pick up the new mlspl.conf and storage password:CODE
$SPLUNK_HOME/bin/splunk restart -
Once Splunk is back up, navigate to the AI Tooklit app and run a test from the Search bar. The following example uses the "internet_traffic.csv" file from the AI Toolkit Showcase:CODE
| inputlookup internet_traffic.csv | apply CDTSM bits_transferred
-
Installing on air-gapped or restricted-network servers
Many on-premises deployments run on servers with no direct internet access. In these environments, the model weights must be downloaded separately on an internet-connected machine and transferred to the target server before starting Docker.
Air-gapped servers without internet access
Complete the following steps on 2 machines: 1 with internet access for the download, and 1 for the air-gapped target server for the install.
-
On an internet-connected machine, download the model weights:The weights are saved to ~/.cache/huggingface/hub/ by default.PYTHON
pip install huggingface_hub python -c "from huggingface_hub import snapshot_download; snapshot_download('cisco-ai/cisco-time-series-model-1.0')" -
Transfer the cache to the air-gapped server via USB drive, internal file share, or similar:CODE
rsync -av ~/.cache/huggingface/hub/models--cisco-ai--cisco-time-series-model-1.0 \ user@air-gapped-host:~/.cache/huggingface/hub/ -
On the air-gapped server, add the following line to serve/.env before starting Docker. This tells the Hugging Face client to use the local cache and skip all network calls:CODE
HF_HUB_OFFLINE=1 -
Continue from Step 4 of the regular, non air-gapped installation instructions in the previous section. Docker will load the weights from the local cache instead of downloading them.
Servers behind a corporate TLS-inspecting proxy
serve/.env:
# Option A — provide your corporate CA bundle (recommended)
CDTSM_HF_SSL_CA_BUNDLE=/path/to/corporate-ca-bundle.pem
# Option B — disable TLS verification (dev/lab environments only)
CDTSM_HF_INSECURE_SSL=true
CDTSM_HF_SSL_CA_BUNDLE must point to a path that exists inside the container, not on the host.
docker-compose.yml:
services:
cdtsm:
volumes:
- /path/to/corporate-ca-bundle.pem:/etc/cdtsm/corporate-ca-bundle.pem:ro
then in serve/.env:
CDTSM_HF_SSL_CA_BUNDLE=/etc/cdtsm/corporate-ca-bundle.pem
Troubleshooting
See the following table for issues you might encounter and how to resolve them.
| Issue | Resolution |
|---|---|
| Server does not start | Check the container logs:
CODE
|
| Model stuck loading | The first run downloads approximately 1 GB of weights from Hugging Face. Check download progress:
CODE
|
| Port 8080 already in use |
Change the port in .env:
CODE
self_hosted_cdtsm_endpoint in mlspl.conf to match, then restart both the server and Splunk.
|
| 401 Unauthorized on inference | Verify the token in .env matches what is stored in Splunk. Test the server directly:
CODE
|
| Model weights not found after reinstall |
Weights are cached at ~/.cache/huggingface/hub/. Force a re-download:
CODE
|