microsoft/qlib · error · ValueError
{self.__class__.__name__} does not support inst_processor. P
Error message
{self.__class__.__name__} does not support inst_processor. Please use `D.features(disk_cache=0)` or `qlib.init(dataset_cache=None)` What it means
When qlib runs against a remote backend (`ClientProvider`), `D.features` with disk_cache asks qlib-server to generate a dataset cache and reads the resulting file over NFS. That code path has no support for `inst_processors`, so passing any raises ValueError with two workarounds in the message.
Source
Thrown at qlib/data/data.py:1107
start_time = cal[0]
end_time = cal[-1]
data = self.dataset_processor(instruments_d, column_names, start_time, end_time, freq, inst_processors)
if return_uri:
return data, feature_uri
else:
return data
else:
"""
Call the server to generate the data-set cache, get the uri of the cache file.
Then load the data from the file on NFS directly.
- using single-process implementation.
"""
# TODO: support inst_processors, need to change the code of qlib-server at the same time
# FIXME: The cache after resample, when read again and intercepted with end_time, results in incomplete data date
if inst_processors:
raise ValueError(
f"{self.__class__.__name__} does not support inst_processor. "
f"Please use `D.features(disk_cache=0)` or `qlib.init(dataset_cache=None)`"
)
self.conn.send_request(
request_type="feature",
request_content={
"instruments": instruments,
"fields": fields,
"start_time": start_time,
"end_time": end_time,
"freq": freq,
"disk_cache": 1,
},
msg_queue=self.queue,
)
# - Done in callback
feature_uri = self.queue.get(timeout=C["timeout"])
if isinstance(feature_uri, Exception):View on GitHub (pinned to 79633dd950)
Solutions
- Call `D.features(..., disk_cache=0)` to bypass the server dataset-cache path (data streamed instead).
- Or re-init with `qlib.init(..., dataset_cache=None)` to disable dataset caching globally.
- Or switch to a local provider_uri so the local provider (which supports inst_processors) is used.
Example fix
# before df = D.features(insts, fields, start, end, inst_processors=[proc]) # after df = D.features(insts, fields, start, end, inst_processors=[proc], disk_cache=0)
Defensive patterns
Strategy: validation
Validate before calling
from qlib.config import C
def server_cache_mode_conflicts(inst_processors) -> bool:
return bool(inst_processors) and C.get('provider') not in (None, 'local') Prevention
- When using qlib-server, always pass disk_cache=0 if inst_processors are needed.
- Set dataset_cache=None in qlib.init for workflows that rely on inst_processors.
When it happens
Trigger: Using `qlib.init(...)` against a qlib-server backend (client mode) and calling `D.features(..., inst_processors=[SomeProcessor()])` with the default disk_cache=1.
Common situations: Mixed setups where a notebook points at remote data but workflow code written for local providers uses inst_processors (e.g. price adjustment processors like AdjustProcessor).
Related errors
- account must be in (int, float, dict)
- Unable to fetch instruments from remote server!
- Invalid mount path
- Failed to create directory {mount_path}, please create {moun
- nfs-common is not found, please install it by execute: sudo
AI-assisted analysis of microsoft/qlib@79633dd950 (2026-08-15).
Data as JSON: /api/errors/b8fb412dcf0353a5.
Report an issue: GitHub.