DeepSeek logo

DeepSeek V3.2

DeepSeekCurrent
byDeepSeekDeepSeek(Privately Held)
Released December 1, 2025
Context163.8K tokens
Price (In / Out)$0.26/M / $0.42/M
CategoryLarge Language Model
Max Output163.8K tokens

About DeepSeek V3.2

DeepSeek V3.2 is a large language model from DeepSeek. Supports up to 163,840 token context window. Achieves 87.1% on MMLU. Available from $0.26/M input tokens.

Capabilities

textcode

Input Modalities

text

Output Modalities

text

Technical Details

API Identifier
deepseek/deepseek-v3.2
Category
Large Language Model
Context Window
163,840 tokens
Max Output Tokens
163,840 tokens

Tags

budget-friendlylong-context

Run this model yourself

Local and cloud setup for DeepSeek V3.2, with exact configurations, sources and clear evidence limits.

Find a model for your hardware
Local hardwareDocumented setupSources checked Oct 17, 2026

Convert and host complete DeepSeek V3.2 DSA reasoning on a 512 GiB CPU workstation

Verify all 163 exact native V3.2 weight shards, perform reader-side CPU conversion through F16 to Q4_K_M, and serve complete DSA/MLA with the native Python encoder/parser. Ordinary chat and thinking follow-up retain history; require actual EOS, closed thinking and nonempty final text. One 8,192-token sequence reserves 2,048 generated tokens. 512 GiB RAM / 4 TiB disk are planning allocations; fit, speed and quality are unknown.

Hardware
Intel Xeon w5-2465X / ASUS W790E-SAGE SE, 512 GiB RAM
Runtime
llama.cpp native V3.2 CPU DSA with full reader conversion v0.7.0 (620d2225; full pin in source URL) · CPU
Model format
GGUF · Reader-generated full Q4_K_M from original ordinary V3.2 mixed FP8/BF16/F32 through F16; complete experts and DSA/MLA retained · Complete reader-generated Q4_K_M through F16 from original FP8 checkpoint; all163 native shards, main DSA/MLA/experts and NextN retained
Workload
8,192 token context · 1 concurrent

Based on source documentation; this setup has not been executed by OpenTools. Memory: unknown. No compatible measurement available.

Read the complete setup guide

Before you start

  • Use an actually configured Intel Xeon w5-2465X / ASUS W790E-SAGE SE Ubuntu 24.04 x86_64 workstation with 512 GiB compatible ECC memory, 4096 GiB single-filesystem working storage, with at least 3.5 TiB initially free and 16 allocated CPU threads. Confirm installed memory, BIOS and free resources.
  • Read the exact native ordinary V3.2 MIT code/model-weights grant and full LICENSE; retain required notices. Only you download and run this workflow after reviewing the license.
  • All 163 exact native ordinary V3.2 shards are mandatory. Complete reader conversion retains DSA, MLA, all experts and NextN. No unqualified prebuilt derivative or architecture-removal fallback is used.
  • Original native tokenizer configuration remains unchanged. Only a separate conversion-input copy changes add_bos_token to true as required by the exact converter; authoritative native Python encoding and raw token IDs preserve exactly one native BOS at serving.
  • Original native add_bos_token false remains unchanged. Separate conversion-only metadata sets it true as the pinned converter explicitly requires; authoritative native Python encoding and raw tokenizer add_special false keep exactly one BOS at serving. This release has no native Jinja template.

Exact model and requirements

Artifact:
DeepSeek AI native V3.2; reader-built GGUF / Complete native DeepSeek V3.2, reader-generated Q4_K_M with DSA and NextN · checkpoint deepseek-ai/DeepSeek-V3.2
Publisher revision:
a7e62ac04ecb2c0a54d736dc46601c5606cf10a6
Artifact digest:
Final generated composition and per-file hashes must be recorded by the reader after successful conversion; no prebuilt derivative digest is invented.
Download size:
Unknown
Memory requirement (unknown):
Unknown — No measured full CPU process peak for all quantized weights, DSA/MLA cache, scratch, loading, runtime and OS.
System RAM / disk:
Unknown / Unknown
Placement:
single device. One CPU host. Full native163-shard input and generated split GGUF composition are disk splits, not device sharding. All language layers, routed/shared experts and DSA/MLA computation on one CPU host; no GPU offload or selective expert subset.
KV cache:
F16 cache flags are explicit; native DSA maintains separate MLA and lightning-indexer state. Exact state layout and working-memory peak remain unmeasured.
Workload:
8,192 token context; Unknown; Unknown; concurrency 1; batch 1; cache unknown; repetitions Unknown.
Tokenizer:
Exact ordinary V3.2 tokenizer and native Python encoder; conversion-only BOS flag and raw serving IDs · a7e62ac04ecb2c0a54d736dc46601c5606cf10a6
Sampling / reasoning:
Native README/generation config temperature 1.0 and top_p 0.95. Top_k 0, min_p 0 and repeat_penalty 1 are author choices. Actual native EOS is mandatory; length/word stops cannot substitute for completed reasoning/final text. Exact native Python encode_messages and strict parse_message_from_completion_text support ordinary chat and thinking follow-up with history and dropped past reasoning. One BOS, full input reserve, actual EOS, closed nonempty thinking and final body are checked. Reduced8,192total/2,048output is an author walkthrough choice, not publisher full-depth reasoning recommendation.
Runtime prerequisites:
Ubuntu 24.04 x86_64; See prerequisites above.

Official artifact · License

Exact native README explicitly grants MIT for code and model weights. The pinned MIT LICENSE requires the copyright and permission notice in copies or substantial portions and disclaims warranties. Read and retain actual terms. No terms acceptance or legal clearance is performed. Public source metadata is ungated.

  • Full native 163-shard serialized input is 689,483,049,129 bytes, not the 37B-active routing label. Main-model family branding is 671B; native parameter metadata 685,355,329,792 includes appended NextN/MTP tensors.
  • Native index metadata total_size 1,370,793,842,752 is not the stored FP8 shard total. A F16 intermediate is roughly 1.371 TB by parameter-width planning; actual generated bytes and Q4 output sizes must be recorded.
  • Provision a 4 TiB working volume for native assets, F16 intermediate, final Q4 outputs, dependencies, logs and buffer. The download guard checks at least 3.5 TiB initially free; this does not prove enough space for conversion or serving. Conversion hardlinks reuse source weights on one filesystem. Stop on resource failures.
  • All main 61 layers plus one appended NextN layer and DSA indexer/MLA state are retained. DSA64 heads,128 index dimension and top-k2048 do not justify an ordinary dense KV formula.
  • 512 GiB RAM is a host allocation, not a measured conversion or serving requirement. CPU/board maximums do not prove actual DIMM/BIOS/OS configuration. Speed, fit and quantization quality are unknown.

One-time setup and hardware

hardware
Unknown — Existing desktop purchase price and incremental hardware cost depend on the reader; unknown.
Existing desktop purchase price and incremental hardware cost depend on the reader; unknown. Tax: unknown.
setup
Unknown — Initial provisioning/build time and labor cost are unknown.
Initial provisioning/build time and labor cost are unknown. Tax: unknown.

Recurring costs

electricity
Unknown — Actual wall power, electricity rate and powered hours are unknown; no TDP-to-wall-power conversion.
Actual wall power, electricity rate and powered hours are unknown; no TDP-to-wall-power conversion. Tax: unknown.
storage
Unknown — Incremental local disk cost unknown;4096 GiB is prescribed working capacity.
Incremental local disk cost unknown;4096 GiB is prescribed working capacity. Tax: unknown.
egress
Unknown — Data transfer price, allowances and traffic volume are unknown.
Data transfer price, allowances and traffic volume are unknown. Tax: unknown.
administration
Unknown — Maintenance labor rate and hours are unknown.
Maintenance labor rate and hours are unknown. Tax: unknown.

Install the runtime

  1. 1. Build the exact full CPU runtime

    Build exact official CPU runtime and install the official hash-pinned Torch 2.11 CPU wheel for Ubuntu 24.04 Python 3.12. Exact converter requirements additionally pin Transformers 4.57.6 and compatible conversion libraries; record every resolved dependency and log. Lazy FP8 dequantization is source-qualified, not executed here.

    Command
    set -e
    sudo apt-get update
    sudo apt-get install -y build-essential cmake git curl ca-certificates openssl python3 python3-venv
    mkdir -p "$HOME/deepseek-v32-native-hosting/models"
    cd "$HOME/deepseek-v32-native-hosting"
    git clone https://github.com/ggml-org/llama.cpp.git
    git -C llama.cpp checkout --detach 620d2225cc436ab0b001e3200e590e3b286ef9ab
    cmake -S llama.cpp -B llama.cpp/build -DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=ON -DGGML_METAL=OFF
    cmake --build llama.cpp/build --config Release -j 16
    python3 -m venv .venv
    .venv/bin/python -m pip install 'https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl#sha256=f82e2ae20c1545bb03997d1cc3143d94e14b800038669ee1aca45808a9acc338'
    .venv/bin/python -m pip install -r llama.cpp/requirements/requirements-convert_hf_to_gguf.txt
    .venv/bin/python -m pip freeze > resolved-python-packages.txt
    ./llama.cpp/build/bin/llama-server --version

    Expected result: The exact source builds and version is recorded. Stop on any failure. No author build, model load or inference result is preclaimed.

Download the model

  1. 1. Save complete native asset verifier

    Save this bounded stdlib reader helper. It validates stable native identity/revision and the canonical 163-file manifest, streams all downloads/checksums, verifies exact auxiliary assets and preserves originals. Whole mutable API-response bytes are not used as a validity gate.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    cat > reader_assets.py <<'PYASSETS'
    """Reader-run complete native asset verification; stdlib only. Does not import model code."""
    import hashlib,json,pathlib,urllib.request,os,shutil
    PIN='a7e62ac04ecb2c0a54d736dc46601c5606cf10a6'
    REPO='deepseek-ai/DeepSeek-V3.2'
    MANIFEST_SHA='f7a593a725bad92ea35caefe75837ecc6ffc44bbd3d8610e7d92f5dac9133652'
    TOTAL=689483049129
    AUX={'config.json': (1552, 'c7fa8b191e9936d8e6a57d864baab82b792fae16a116416cdd3a75ba76bc5af1'), 'tokenizer_config.json': (795, 'b5de6cc1c6758d02c0d3cec0efa062f1161654475458003f6f293f6ef28acdaa'), 'tokenizer.json': (7847502, 'cd050be35cae877f8f0aa847f45aa87e23835a56ca32b29b28545597852784e5'), 'generation_config.json': (171, 'c9ce7f8d4a66c6cedd053650db3596328f241f00a7e49e67b89e5c9e336e7205'), 'LICENSE': (1084, 'f2c6c602815669d292889e5be8c802f2ed950653b77999b1584e8e6aed25d040')}
    
    def digest(path):
     h=hashlib.sha256();n=0
     with open(path,'rb') as f:
      for b in iter(lambda:f.read(8*1024*1024),b''):h.update(b);n+=len(b)
     return n,h.hexdigest()
    
    def check_manifest(obj):
     if obj.get('id')!=REPO or obj.get('sha')!=PIN:raise ValueError('Wrong native identity or revision')
     out=[]
     for f in obj.get('siblings',[]):
      name=f.get('rfilename','')
      if name.endswith('.safetensors'):
       out.append({'name':name,'bytes':f.get('size'),'sha256':f.get('lfs',{}).get('sha256')})
     out.sort(key=lambda f:f['name'])
     if len(out)!=163 or sum(f['bytes'] for f in out)!=TOTAL:raise ValueError('Incomplete checkpoint')
     if hashlib.sha256(json.dumps(out,sort_keys=True,separators=(',',':')).encode()).hexdigest()!=MANIFEST_SHA:raise ValueError('Exact all-shard manifest mismatch')
     return out
    
    def fetch(name,n,h):
     path=pathlib.Path('native')/name
     path.parent.mkdir(parents=True,exist_ok=True)
     if path.exists():
      if digest(path)!=(n,h):raise ValueError('Existing asset mismatch '+name)
      return
     tmp=path.with_suffix(path.suffix+'.partial')
     with urllib.request.urlopen('https://huggingface.co/'+REPO+'/resolve/'+PIN+'/'+name,timeout=120) as r,open(tmp,'wb') as f:
      count=0
      for b in iter(lambda:r.read(8*1024*1024),b''):
       count+=len(b)
       if count>n:raise ValueError('Downloaded asset exceeds exact metadata size '+name)
       f.write(b)
     if digest(tmp)!=(n,h):raise ValueError('Downloaded asset mismatch '+name)
     tmp.replace(path)
    
    def main():
     # Four TiB is prescribed working storage, not a proven conversion peak.
     existing=sum(p.stat().st_size for p in pathlib.Path('native').glob('*.safetensors'))
     if shutil.disk_usage('.').free+existing<3848290697216:raise ValueError('Prescribe at least3.5TiB free at initial download (existing native bytes credited only pending checksum); conversion may still need more')
     with urllib.request.urlopen('https://huggingface.co/api/models/'+REPO+'/revision/'+PIN+'?blobs=true',timeout=120) as r:raw=r.read(2000001)
     if len(raw)>2000000:raise ValueError('Metadata bound exceeded')
     files=check_manifest(json.loads(raw));pathlib.Path('native').mkdir(exist_ok=True)
     for f in files:fetch(f['name'],f['bytes'],f['sha256'])
     for name,(n,h) in AUX.items():fetch(name,n,h)
     # Index is native source text, exact digest derived privately from complete archived bytes.
     index_n,index_h=(8938926, '2a150b2af4aba7b037edc9fdba70f3b41abf758ee926279e7701d954298f9884')
     fetch('model.safetensors.index.json',index_n,index_h)
     idx=json.loads(pathlib.Path('native/model.safetensors.index.json').read_text())
     if set(idx['weight_map'].values())!={f['name'] for f in files}:raise ValueError('Index/shard composition mismatch')
     out=pathlib.Path('conversion-input');out.mkdir(exist_ok=True)
     for path in pathlib.Path('native').iterdir():
      if not path.is_file():continue
      dest=out/path.name
      if path.name=='tokenizer_config.json':
       obj=json.loads(path.read_text());assert obj['add_bos_token'] is False;obj['add_bos_token']=True
       data=(json.dumps(obj,ensure_ascii=False,indent=2)+'\n').encode()
       if dest.exists() and dest.read_bytes()!=data:raise ValueError('Unexpected derived tokenizer config')
       dest.write_bytes(data)
      elif dest.exists():
       if not os.path.samefile(path,dest):raise ValueError('Expected same-filesystem hardlink '+str(dest))
      else:os.link(path,dest)
     fetch('encoding/encoding_dsv32.py',14317,'5e068c2ba2a6e5ebe37a49bb005650c507e7935d77a32f3f7c11ee071498b370')
     pathlib.Path('encoding_dsv32.py').write_bytes(pathlib.Path('native/encoding/encoding_dsv32.py').read_bytes())
     pathlib.Path('native-asset-manifest.json').write_text(json.dumps(files,indent=2)+'\n')
     pathlib.Path('derived-tokenizer-config-audit.json').write_text(json.dumps({'nativeSha256':AUX['tokenizer_config.json'][1],'derivedSha256':digest(out/'tokenizer_config.json')[1],'onlySemanticChange':{'add_bos_token':[False,True]},'reason':'Pinned converter assertion; serving uses exact native Python encoder and raw IDs with add_special false.'},indent=2)+'\n')
     print('All163 native shards and exact auxiliary files pass. Native files unchanged; conversion-only tokenizer flag recorded.')
    if __name__=='__main__':main()
    PYASSETS

    Expected result: Verifier saved. No model files are downloaded until the next reader-run step.

  2. 2. Download all native shards and prepare a separate conversion input

    Run only after checking at least 3.5 TiB initially free on the 4 TiB working disk. Existing files must match exact metadata. Hardlinks avoid a second full native copy on this filesystem; the derived tokenizer configuration changes only the required BOS flag. Any failure stops setup.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    python3 reader_assets.py

    Expected result: All 163 native shards, index and auxiliary checks pass. Native bytes remain unchanged. The derived tokenizer configuration audit records its exact hash and sole flag change; original weight total is 689,483,049,129 bytes.

  3. 3. Convert the complete original checkpoint and quantize every split

    Reader operation only. Default lazy conversion preserves all main and NextN tensors; never pass no-mtp or mtp-only options. F16 output and final Q4 files coexist with native input, so monitor disk and memory and stop on exhaustion. No completed conversion or fit is preclaimed.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    .venv/bin/python llama.cpp/convert_hf_to_gguf.py conversion-input --outfile models/DeepSeek-V3.2-Native-F16.gguf --outtype f16 --split-max-size 40G
    FIRST_F16="$(find models -maxdepth 1 -name 'DeepSeek-V3.2-Native-F16-00001-of-*.gguf' -print)"
    test -n "$FIRST_F16"
    ./llama.cpp/build/bin/llama-quantize --keep-split "$FIRST_F16" models/DeepSeek-V3.2-Native-Q4_K_M.gguf Q4_K_M 16

    Expected result: Full F16 and Q4 split files are generated if reader conversion succeeds. Actual split counts, bytes and digests are unknown until execution; a partial file set is not a usable model.

  4. 4. Audit complete generated architecture and record output hashes

    Save and run the exact metadata-only reader audit. Full model architecture/DSA KV must be in the first generated split; later parts contain split metadata. Every ordered split must be present and the combined main-layer DSA/NextN tensor set complete. Record actual streamed hashes/bytes; no quality or fit result follows.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    cat > reader-check-gguf.py <<'PYGGUF'
    """Reader-only generated GGUF metadata and streaming-digest audit; no model inference."""
    import glob,json,pathlib,sys
    from reader_assets import digest
    
    def inspect(readers):
     if not readers:raise ValueError('No generated split files')
     names=set()
     expected={'general.architecture':'deepseek32','deepseek32.block_count':62,'deepseek32.nextn_predict_layers':1,'deepseek32.expert_count':256,'deepseek32.attention.indexer.head_count':64,'deepseek32.attention.indexer.key_length':128,'deepseek32.attention.indexer.top_k':2048}
     for i,r in enumerate(readers):
      for key,value in expected.items():
       f=r.get_field(key)
       # Exact writer/quantizer stores full model KV only in the first split.
       if (i==0 and f is None) or (f is not None and f.contents()!=value):raise ValueError('Wrong full architecture metadata '+key)
      f=r.get_field('split.count');n=r.get_field('split.no')
      if len(readers)>1 and (f is None or f.contents()!=len(readers) or n is None or n.contents()!=i):raise ValueError('Missing or misordered split')
      for t in r.tensors:
       if t.name in names:raise ValueError('Duplicate generated tensor')
       names.add(t.name)
     for layer in range(61):
      for suffix in ('indexer.k_norm.weight','indexer.k_norm.bias','indexer.proj.weight','indexer.attn_k.weight','indexer.attn_q_b.weight'):
       if 'blk.'+str(layer)+'.'+suffix not in names:raise ValueError('Missing native DSA indexer tensor')
     if not any(n.startswith('blk.61.') for n in names):raise ValueError('Missing appended NextN tensors')
     return len(names)
    
    def main():
     # Import only when reader runs after conversion. Author never imports gguf/native dependencies.
     import gguf
     files=sorted(glob.glob('models/DeepSeek-V3.2-Native-Q4_K_M*.gguf'))
     readers=[gguf.GGUFReader(f,'r') for f in files]
     count=inspect(readers)
     manifest=[]
     for f in files:
      n,h=digest(f);manifest.append({'name':f,'bytes':n,'sha256':h})
     pathlib.Path('generated-gguf-manifest.json').write_text(json.dumps({'nativeRevision':'a7e62ac04ecb2c0a54d736dc46601c5606cf10a6','tensorCount':count,'files':manifest},indent=2)+'\n')
     pathlib.Path('first-model-path').write_text(files[0]+'\n')
     print('All generated splits retain deepseek32, DSA indexer fields/tensors and appended NextN; actual output hashes recorded. This is not fit, speed or quantization-quality proof.')
    if __name__=='__main__':main()
    PYGGUF
    PYTHONPATH=llama.cpp/gguf-py .venv/bin/python reader-check-gguf.py

    Expected result: Generated manifest and first-model-path are recorded after all architecture/composition checks. No inference or quantization-quality conclusion follows.

Configure

  1. 1. Create a private service credential

    Generate a reader-owned local service password, preserving an existing key on repeat setup. Never print or share it; this is not a provider API credential.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    umask 077
    if [ ! -e .api-key ]; then openssl rand -hex 32 > .api-key; fi
    test -s .api-key
    chmod 600 .api-key

    Expected result: A nonempty mode-600 private .api-key exists; existing key preserved.

  2. 2. Save bounded native V3.2 conversation diagnostic

    Save exact stdlib client. Reader alone imports the separately checksum-verified native encoder/parser. Ordinary chat and thinking follow-up validate full history, one BOS, input/output reserve, true EOS, no truncation and strict native parsing. Author never executes the encoder or model.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    cat > reasoning-client.py <<'PYCLIENT'
    """Private native DeepSeek V3.2 raw-completion diagnostic; stdlib only."""
    import hashlib, importlib.util, json, pathlib, urllib.request, urllib.error
    BASE='http://127.0.0.1:8080'
    CONTEXT, OUTPUT = 8192, 2048
    ENCODER_SHA='5e068c2ba2a6e5ebe37a49bb005650c507e7935d77a32f3f7c11ee071498b370'
    BOS='<|begin▁of▁sentence|>'
    EOS='<|end▁of▁sentence|>'
    
    def positive(v): return type(v) is int and v>0
    
    def checked_messages(messages):
        if not isinstance(messages,list) or not 1<=len(messages)<=12: raise ValueError('Bounded conversation required')
        for i,m in enumerate(messages):
            if not isinstance(m,dict) or set(m)-{'role','content'}: raise ValueError('Only ordinary text conversation is accepted by this diagnostic')
            role,text=m.get('role'),m.get('content')
            if role not in ('system','user','assistant') or (role=='system' and i!=0): raise ValueError('Invalid role order')
            if not isinstance(text,str) or not text.strip() or len(text.encode())>12000: raise ValueError('Invalid text')
            if any(t in text for t in (BOS,EOS,'<|User|>','<|Assistant|>','<think>','</think>','|DSML|')): raise ValueError('Reserved native control marker in user content')
        roles=[m['role'] for m in messages if m['role']!='system']
        if not roles or roles!=['user' if i%2==0 else 'assistant' for i in range(len(roles))] or roles[-1]!='user': raise ValueError('Alternating user/assistant history ending in user required')
        return messages
    
    def complete(call,encode,parse,messages,mode):
        if mode not in ('thinking','chat'): raise ValueError('Invalid native mode')
        checked_messages(messages)
        prompt=encode(messages,thinking_mode=mode,drop_thinking=True,add_default_bos_token=True)
        if not isinstance(prompt,str) or not prompt.startswith(BOS) or prompt.count(BOS)!=1: raise ValueError('Exactly one native BOS required')
        expected='<think>' if mode=='thinking' else '</think>'
        if not prompt.endswith(expected): raise ValueError('Native mode prefix mismatch')
        ids=call('/tokenize',{'content':prompt,'add_special':False,'parse_special':True}).get('tokens')
        if not isinstance(ids,list) or not ids or any(type(x)is not int or x<0 for x in ids) or ids[0]!=0 or ids.count(0)!=1: raise ValueError('Invalid token IDs or duplicate BOS')
        if len(ids)+OUTPUT>CONTEXT: raise ValueError('Input plus complete reasoning/output reserve exceeds context')
        body={'prompt':ids,'n_predict':OUTPUT,'temperature':1.0,'top_p':0.95,'top_k':0,'min_p':0,'repeat_penalty':1,'stream':False,'cache_prompt':False,'return_tokens':True,'stop':[]}
        result=call('/completion',body)
        if result.get('stop_type')!='eos' or result.get('truncated') is not False: raise ValueError('Require actual native EOS without truncation; limit/word stop does not prove completion')
        n=result.get('tokens_predicted')
        if not positive(n) or n>OUTPUT or result.get('tokens_evaluated')!=len(ids): raise ValueError('Usage mismatch')
        text=result.get('content')
        if not isinstance(text,str) or not text.strip(): raise ValueError('Empty completion')
        # Native server normally omits the EOS text. Reconstitute it only after actual EOS proof.
        if EOS in text and not text.endswith(EOS): raise ValueError('Unexpected internal EOS')
        serialized=text if text.endswith(EOS) else text+EOS
        parsed=parse(serialized,thinking_mode=mode)
        if not isinstance(parsed,dict) or parsed.get('tool_calls') or not isinstance(parsed.get('content'),str) or not parsed['content'].strip(): raise ValueError('Nonempty final text with no tools required')
        if mode=='thinking' and (not isinstance(parsed.get('reasoning_content'),str) or not parsed['reasoning_content'].strip() or '</think>' not in text): raise ValueError('Unclosed or empty native reasoning')
        return {'mode':mode,'inputTokens':len(ids),'outputCap':OUTPUT,'parsed':parsed,'nativeResponse':result}
    
    def http_call(key):
        def call(path,body=None):
            data=None if body is None else json.dumps(body).encode()
            req=urllib.request.Request(BASE+path,data=data,headers={'Authorization':'Bearer '+key,'Content-Type':'application/json'})
            with urllib.request.urlopen(req,timeout=7200) as r:
                if r.status!=200: raise ValueError('HTTP failure')
                raw=r.read(2000001)
            if len(raw)>2000000: raise ValueError('Response limit')
            obj=json.loads(raw)
            if not isinstance(obj,dict): raise ValueError('JSON object required')
            return obj
        return call
    
    def main():
        key=pathlib.Path('.api-key').read_text().strip()
        if len(key)!=64 or any(c not in '0123456789abcdef' for c in key): raise ValueError('Restore private service key')
        path=pathlib.Path('encoding_dsv32.py')
        if hashlib.sha256(path.read_bytes()).hexdigest()!=ENCODER_SHA: raise ValueError('Native encoder checksum mismatch')
        spec=importlib.util.spec_from_file_location('pinned_native_encoding',path)
        native=importlib.util.module_from_spec(spec);spec.loader.exec_module(native)
        call=http_call(key);call('/health')
        req=urllib.request.Request(BASE+'/completion',data=b'{}',headers={'Content-Type':'application/json'})
        try:
            with urllib.request.urlopen(req,timeout=30): raise ValueError('Unauthorized completion accepted')
        except urllib.error.HTTPError as e:
            if e.code!=401: raise
        history=[{'role':'user','content':'The community library is open weekdays 9am to 6pm, Saturday 10am to 4pm and closed Sunday. State the weekday opening time only.'}]
        first=complete(call,native.encode_messages,native.parse_message_from_completion_text,history,'chat')
        pathlib.Path('chat-response.json').write_text(json.dumps(first,indent=2)+'\n')
        history += [{'role':'assistant','content':first['parsed']['content']},{'role':'user','content':'Using the same supplied schedule, how many hours is the library open on Saturday, and is it open on Sunday? Explain briefly.'}]
        second=complete(call,native.encode_messages,native.parse_message_from_completion_text,history,'thinking')
        pathlib.Path('thinking-response.json').write_text(json.dumps(second,indent=2)+'\n')
        print(json.dumps({'chat':first,'thinking':second},ensure_ascii=False))
        print('Manually inspect supplied schedule facts and reasoning. Native EOS/closed thinking proves completion shape, not answer quality or speed.')
    if __name__=='__main__': main()
    PYCLIENT

    Expected result: Client saved without encoder or model execution. Exact native encoding file was separately checksum-verified.

Start the model

  1. 1. Serve complete native-converted V3.2 with DSA

    Keep the native service foreground and preserve logs. Generated first split loads the complete audited composition. All main DSA/MLA and experts remain; NextN tensors are retained without requesting speculative MTP. Native Python encoding supplies complete raw token IDs rather than a Jinja substitute.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    export DEEPSEEK_NATIVE_SERVICE_KEY="$(cat .api-key)"
    ./llama.cpp/build/bin/llama-server -m "$(cat first-model-path)" --alias deepseek-v32-native --host 127.0.0.1 --port 8080 --api-key-file .api-key --device none -ngl 0 -t 16 -c 8192 -np 1 -n 2048 --no-context-shift --flash-attn off --cache-type-k f16 --cache-type-v f16 -b 256 -ub 256 --special --temp 1.0 --top-p 0.95 --top-k 0 --min-p 0 --repeat-penalty 1

    Expected result: If successful, complete DEEPSEEK32 DSA initializes and authenticated loopback becomes ready. Architecture, split, tokenizer or resource errors require stopping; no author load or fit result exists.

Connect to your endpoint

http://127.0.0.1:8080/completion

Same trusted workstation loopback only.

Access: loopback. Reader-generated private Bearer key protects raw completion and tokenizer routes. Health is public on loopback. Process arguments and files require a trusted host; privileged local users are outside this access boundary.

Verify the setup

  1. 1. Verify native ordinary chat, reasoning, history and actual completion

    Use a second shell on this host; cloud diagnostics run inside the VM with its files/key. The client checks health and unauthorized401, then exact native encoding for ordinary chat and thinking follow-up with history. Full prompt and output reserve are counted before generation. Require actual EOS, closed thinking and nonempty final text; inspect supplied schedule facts manually.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    python3 reasoning-client.py

    Expected result: Both native modes complete with actual EOS, matching usage and no truncation. Inspect weekday/Saturday/Sunday facts in saved outputs; protocol shape is not semantic correctness, speed or general reasoning quality.

Performance evidence

No compatible measurement available. Documented support and estimated memory do not establish response speed.

Limits and troubleshooting

  • Documented source qualification only: no native dependencies imported, weights downloaded, conversion/build/model load/inference performed or fit/speed/quality measured.
  • Exact ordinary V3.2 native checkpoint and authoritative14,317-byte Python encoder/parser are independently pinned. Exp and Speciale are distinct checkpoints; no sibling template or artifact substitutes here.
  • All 163 native shards total 689,483,049,129 bytes. Reader-produced F16/Q4 outputs have unknown actual sizes/digests until successful execution; all expert and DSA tensors must remain.
  • The native 61 main layers plus appended NextN layer are retained by default conversion. Main branding 671B/37B-active differs from 685,355,329,792 total parameter metadata; routing activity is not resident weight size.
  • Native config independently declares DEEPSEEK32 DSA/MLA. Exact pinned converter and runtime preserve its native architecture and complete input composition; no derivative with unqualified or removed DSA is used.
  • Native config maximum positions 163,840 and tokenizer maximum 131,072 are source metadata, not tested serving limits. Author selects 8,192 combined tokens and 2,048 generated reasoning/final tokens; this is not the publisher full-reasoning recommendation.
  • DSA indexer selects up to 2,048 prior positions with 64 heads of 128 dimensions. MLA/indexer cache and scratch require separate memory; no dense ordinary KV estimate or sparse speed claim is made.
  • Only a separate conversion tokenizer copy changes add_bos_token true for the converter assertion. Native original and Python encoder are unchanged. Serving raw tokenization disables added specials and checks exactly one BOS.
  • 512 GiB RAM and 4 TiB working disk are planning allocations, not proven peak bounds. Source weights, F16 intermediate, Q4 outputs and dependencies coexist. Stop on allocation/disk errors and preserve logs.
  • Torch 2.11 official CPU wheel supports exact dtype conversion; resolved remaining conversion dependencies are reader-installed and logged, not a fully agent-executed environment or compatibility result.
  • Private loopback plus Bearer key requires a trusted host; privileged local users remain outside this boundary. Public TLS, multiuser isolation, tools, native GPU/distribution, full context and speculative MTP remain separate open scopes; required guide total is null.
Native checksum, missing shard or generated architecture mismatch
Stop and preserve the failed check. Require all exact native assets and generated deepseek32 DSA metadata/tensors. Do not disable sparse attention or substitute an unrelated checkpoint.
Converter BOS assertion
Use separate conversion inputs and the recorded sole BOS-flag change; never edit pinned original tokenizer metadata. Native Python encoding supplies exactly one BOS and raw serving token IDs.
Memory, disk or native runtime failure
Stop. Planning capacity does not prove conversion or serving fit. Preserve logs and actual resource usage for a separately reviewed plan.
Length stop, open thinking or empty final body
Treat verification as failed. Require actual EOS and closed nonempty reasoning/final text; no silent truncation or fabricated answer-quality claim.
Unauthorized or unreachable service
Check foreground logs, exact workstation loopback and matching reader key; keep the native service on this trusted host.

Stop the model

  1. 1. Stop the native service

    Press Ctrl+C in the foreground local server shell, unset the key in every shell and verify the intended loopback listener is gone.

    Command
    unset DEEPSEEK_NATIVE_SERVICE_KEY
    if curl --silent --max-time 3 http://127.0.0.1:8080/health >/dev/null; then echo "Endpoint still responds: stop intended process"; exit 1; else echo "Endpoint no longer responds"; fi

    Expected result: The intended workstation loopback service no longer responds.

Uninstall

  1. 1. Remove dedicated walkthrough files

    Back up wanted results and logs and confirm the dedicated path before removal. Shared system build packages remain installed.

    Command
    rm -r -- "$HOME/deepseek-v32-native-hosting"

    Expected result: Dedicated native shards, derived conversion inputs, generated model files, dependency environment, client, key, results and build files are removed; shared system packages remain.

Sources and verification

Sources checked Oct 17, 2026. Verification source

Compare this configuration
Cloud serverDocumented setupSources checked Oct 17, 2026

Convert and host complete DeepSeek V3.2 DSA reasoning on a private 512 GiB CPU VM

Verify all 163 exact native V3.2 weight shards, perform reader-side CPU conversion through F16 to Q4_K_M, and serve complete DSA/MLA with the native Python encoder/parser. Ordinary chat and thinking follow-up retain history; require actual EOS, closed thinking and nonempty final text. One 8,192-token sequence reserves 2,048 generated tokens. 512 GiB RAM / 4 TiB disk are planning allocations; fit, speed and quality are unknown.

Hardware
AWS r7i.16xlarge, 64 vCPU, 512 GiB RAM
Runtime
llama.cpp native V3.2 CPU DSA with full reader conversion v0.7.0 (620d2225; full pin in source URL) · CPU
Model format
GGUF · Reader-generated full Q4_K_M from original ordinary V3.2 mixed FP8/BF16/F32 through F16; complete experts and DSA/MLA retained · Complete reader-generated Q4_K_M through F16 from original FP8 checkpoint; all163 native shards, main DSA/MLA/experts and NextN retained
Workload
8,192 token context · 1 concurrent

Based on source documentation; this setup has not been executed by OpenTools. Memory: unknown. No compatible measurement available.

Read the complete setup guide

Before you start

  • Use an owned Ubuntu 24.04 x86_64 AWS r7i.16xlarge in us-east-1 with 64 vCPU,512 GiB RAM and 4096 GiB gp 3 working storage, with at least 3.5 TiB initially free. Restrict SSH and keep port 8080 closed. Capacity, conversion and serving fit remain unknown.
  • Read the exact native ordinary V3.2 MIT code/model-weights grant and full LICENSE; retain required notices.
  • All 163 exact native ordinary V3.2 shards are mandatory. Complete reader conversion retains DSA, MLA, all experts and NextN. No unqualified prebuilt derivative or architecture-removal fallback is used.
  • Original native tokenizer configuration remains unchanged. Only a separate conversion-input copy changes add_bos_token to true as required by the exact converter; authoritative native Python encoding and raw token IDs preserve exactly one native BOS at serving.
  • Original native add_bos_token false remains unchanged. Separate conversion-only metadata sets it true as the pinned converter explicitly requires; authoritative native Python encoding and raw tokenizer add_special false keep exactly one BOS at serving. This release has no native Jinja template.

Exact model and requirements

Artifact:
DeepSeek AI native V3.2; reader-built GGUF / Complete native DeepSeek V3.2, reader-generated Q4_K_M with DSA and NextN · checkpoint deepseek-ai/DeepSeek-V3.2
Publisher revision:
a7e62ac04ecb2c0a54d736dc46601c5606cf10a6
Artifact digest:
Final generated composition and per-file hashes must be recorded by the reader after successful conversion; no prebuilt derivative digest is invented.
Download size:
Unknown
Memory requirement (unknown):
Unknown — No measured full CPU process peak for all quantized weights, DSA/MLA cache, scratch, loading, runtime and OS.
System RAM / disk:
Unknown / Unknown
Placement:
single device. One CPU host. Full native163-shard input and generated split GGUF composition are disk splits, not device sharding. All language layers, routed/shared experts and DSA/MLA computation on one CPU host; no GPU offload or selective expert subset.
KV cache:
F16 cache flags are explicit; native DSA maintains separate MLA and lightning-indexer state. Exact state layout and working-memory peak remain unmeasured.
Workload:
8,192 token context; Unknown; Unknown; concurrency 1; batch 1; cache unknown; repetitions Unknown.
Tokenizer:
Exact ordinary V3.2 tokenizer and native Python encoder; conversion-only BOS flag and raw serving IDs · a7e62ac04ecb2c0a54d736dc46601c5606cf10a6
Sampling / reasoning:
Native README/generation config temperature 1.0 and top_p 0.95. Top_k 0, min_p 0 and repeat_penalty 1 are author choices. Actual native EOS is mandatory; length/word stops cannot substitute for completed reasoning/final text. Exact native Python encode_messages and strict parse_message_from_completion_text support ordinary chat and thinking follow-up with history and dropped past reasoning. One BOS, full input reserve, actual EOS, closed nonempty thinking and final body are checked. Reduced8,192total/2,048output is an author walkthrough choice, not publisher full-depth reasoning recommendation.
Runtime prerequisites:
Ubuntu 24.04 x86_64; See prerequisites above.

Official artifact · License

Exact native README explicitly grants MIT for code and model weights. The pinned MIT LICENSE requires the copyright and permission notice in copies or substantial portions and disclaims warranties. Read and retain actual terms. No terms acceptance or legal clearance is performed. Public source metadata is ungated.

  • Full native 163-shard serialized input is 689,483,049,129 bytes, not the 37B-active routing label. Main-model family branding is 671B; native parameter metadata 685,355,329,792 includes appended NextN/MTP tensors.
  • Native index metadata total_size 1,370,793,842,752 is not the stored FP8 shard total. A F16 intermediate is roughly 1.371 TB by parameter-width planning; actual generated bytes and Q4 output sizes must be recorded.
  • Provision a 4 TiB working volume for native assets, F16 intermediate, final Q4 outputs, dependencies, logs and buffer. The download guard checks at least 3.5 TiB initially free; this does not prove enough space for conversion or serving. Conversion hardlinks reuse source weights on one filesystem. Stop on resource failures.
  • All main 61 layers plus one appended NextN layer and DSA indexer/MLA state are retained. DSA64 heads,128 index dimension and top-k2048 do not justify an ordinary dense KV formula.
  • 512 GiB RAM is a host allocation, not a measured conversion or serving requirement. CPU/board maximums do not prove actual DIMM/BIOS/OS configuration. Speed, fit and quantization quality are unknown.

One-time setup and hardware

hardware
Not applicable — AWS hardware acquisition is included in compute rental; no purchased GPU required. Any separate hardware cost is not applicable.
AWS hardware acquisition is included in compute rental; no purchased GPU required. Any separate hardware cost is not applicable. Tax: unknown.
setup
Unknown — Initial provisioning/build time and labor cost are unknown.
Initial provisioning/build time and labor cost are unknown. Tax: unknown.

Recurring costs

compute
$4.23 / hour
Exact dated AWS feed row is USD 4.2336 per billed instance-hour, not an extrapolation. Eight hours USD 33.8688; 24 hours USD 101.6064 compute. Idle running time bills; capacity unknown. Storage, transfer, tax and administration are additional. Region: us-east-1. SKU: r7i.16xlarge Linux On-Demand. Tax: excluded. Price dated Oct 15, 2026. Price source
storage
$0.08 / GB month
Dated us-east-1 gp3 quote USD 0.08 per provider GB-month, defined as 1024^3 bytes. Selected 4096 GiB costs USD 327.68 per full month, prorated by provisioned duration, at baseline 3000 IOPS / 125 MB/s. Retained volumes and snapshots bill separately. Region: us-east-1. SKU: EBS gp3 baseline 3000 IOPS / 125 MB/s. Tax: excluded. Price dated Oct 16, 2026. Price source
egress
Unknown — Data transfer price, allowances and traffic volume are unknown.
Data transfer price, allowances and traffic volume are unknown. Tax: unknown.
administration
Unknown — Maintenance labor rate and hours are unknown.
Maintenance labor rate and hours are unknown. Tax: unknown.

Install the runtime

  1. 1. Build the exact full CPU runtime

    Build exact official CPU runtime and install the official hash-pinned Torch 2.11 CPU wheel for Ubuntu 24.04 Python 3.12. Exact converter requirements additionally pin Transformers 4.57.6 and compatible conversion libraries; record every resolved dependency and log. Lazy FP8 dequantization is source-qualified, not executed here.

    Command
    set -e
    sudo apt-get update
    sudo apt-get install -y build-essential cmake git curl ca-certificates openssl python3 python3-venv
    mkdir -p "$HOME/deepseek-v32-native-hosting/models"
    cd "$HOME/deepseek-v32-native-hosting"
    git clone https://github.com/ggml-org/llama.cpp.git
    git -C llama.cpp checkout --detach 620d2225cc436ab0b001e3200e590e3b286ef9ab
    cmake -S llama.cpp -B llama.cpp/build -DCMAKE_BUILD_TYPE=Release -DGGML_NATIVE=ON -DGGML_METAL=OFF
    cmake --build llama.cpp/build --config Release -j 64
    python3 -m venv .venv
    .venv/bin/python -m pip install 'https://download-r2.pytorch.org/whl/cpu/torch-2.11.0%2Bcpu-cp312-cp312-manylinux_2_28_x86_64.whl#sha256=f82e2ae20c1545bb03997d1cc3143d94e14b800038669ee1aca45808a9acc338'
    .venv/bin/python -m pip install -r llama.cpp/requirements/requirements-convert_hf_to_gguf.txt
    .venv/bin/python -m pip freeze > resolved-python-packages.txt
    ./llama.cpp/build/bin/llama-server --version

    Expected result: The exact source builds and version is recorded. Stop on any failure. No author build, model load or inference result is preclaimed.

Download the model

  1. 1. Save complete native asset verifier

    Save this bounded stdlib reader helper. It validates stable native identity/revision and the canonical 163-file manifest, streams all downloads/checksums, verifies exact auxiliary assets and preserves originals. Whole mutable API-response bytes are not used as a validity gate.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    cat > reader_assets.py <<'PYASSETS'
    """Reader-run complete native asset verification; stdlib only. Does not import model code."""
    import hashlib,json,pathlib,urllib.request,os,shutil
    PIN='a7e62ac04ecb2c0a54d736dc46601c5606cf10a6'
    REPO='deepseek-ai/DeepSeek-V3.2'
    MANIFEST_SHA='f7a593a725bad92ea35caefe75837ecc6ffc44bbd3d8610e7d92f5dac9133652'
    TOTAL=689483049129
    AUX={'config.json': (1552, 'c7fa8b191e9936d8e6a57d864baab82b792fae16a116416cdd3a75ba76bc5af1'), 'tokenizer_config.json': (795, 'b5de6cc1c6758d02c0d3cec0efa062f1161654475458003f6f293f6ef28acdaa'), 'tokenizer.json': (7847502, 'cd050be35cae877f8f0aa847f45aa87e23835a56ca32b29b28545597852784e5'), 'generation_config.json': (171, 'c9ce7f8d4a66c6cedd053650db3596328f241f00a7e49e67b89e5c9e336e7205'), 'LICENSE': (1084, 'f2c6c602815669d292889e5be8c802f2ed950653b77999b1584e8e6aed25d040')}
    
    def digest(path):
     h=hashlib.sha256();n=0
     with open(path,'rb') as f:
      for b in iter(lambda:f.read(8*1024*1024),b''):h.update(b);n+=len(b)
     return n,h.hexdigest()
    
    def check_manifest(obj):
     if obj.get('id')!=REPO or obj.get('sha')!=PIN:raise ValueError('Wrong native identity or revision')
     out=[]
     for f in obj.get('siblings',[]):
      name=f.get('rfilename','')
      if name.endswith('.safetensors'):
       out.append({'name':name,'bytes':f.get('size'),'sha256':f.get('lfs',{}).get('sha256')})
     out.sort(key=lambda f:f['name'])
     if len(out)!=163 or sum(f['bytes'] for f in out)!=TOTAL:raise ValueError('Incomplete checkpoint')
     if hashlib.sha256(json.dumps(out,sort_keys=True,separators=(',',':')).encode()).hexdigest()!=MANIFEST_SHA:raise ValueError('Exact all-shard manifest mismatch')
     return out
    
    def fetch(name,n,h):
     path=pathlib.Path('native')/name
     path.parent.mkdir(parents=True,exist_ok=True)
     if path.exists():
      if digest(path)!=(n,h):raise ValueError('Existing asset mismatch '+name)
      return
     tmp=path.with_suffix(path.suffix+'.partial')
     with urllib.request.urlopen('https://huggingface.co/'+REPO+'/resolve/'+PIN+'/'+name,timeout=120) as r,open(tmp,'wb') as f:
      count=0
      for b in iter(lambda:r.read(8*1024*1024),b''):
       count+=len(b)
       if count>n:raise ValueError('Downloaded asset exceeds exact metadata size '+name)
       f.write(b)
     if digest(tmp)!=(n,h):raise ValueError('Downloaded asset mismatch '+name)
     tmp.replace(path)
    
    def main():
     # Four TiB is prescribed working storage, not a proven conversion peak.
     existing=sum(p.stat().st_size for p in pathlib.Path('native').glob('*.safetensors'))
     if shutil.disk_usage('.').free+existing<3848290697216:raise ValueError('Prescribe at least3.5TiB free at initial download (existing native bytes credited only pending checksum); conversion may still need more')
     with urllib.request.urlopen('https://huggingface.co/api/models/'+REPO+'/revision/'+PIN+'?blobs=true',timeout=120) as r:raw=r.read(2000001)
     if len(raw)>2000000:raise ValueError('Metadata bound exceeded')
     files=check_manifest(json.loads(raw));pathlib.Path('native').mkdir(exist_ok=True)
     for f in files:fetch(f['name'],f['bytes'],f['sha256'])
     for name,(n,h) in AUX.items():fetch(name,n,h)
     # Index is native source text, exact digest derived privately from complete archived bytes.
     index_n,index_h=(8938926, '2a150b2af4aba7b037edc9fdba70f3b41abf758ee926279e7701d954298f9884')
     fetch('model.safetensors.index.json',index_n,index_h)
     idx=json.loads(pathlib.Path('native/model.safetensors.index.json').read_text())
     if set(idx['weight_map'].values())!={f['name'] for f in files}:raise ValueError('Index/shard composition mismatch')
     out=pathlib.Path('conversion-input');out.mkdir(exist_ok=True)
     for path in pathlib.Path('native').iterdir():
      if not path.is_file():continue
      dest=out/path.name
      if path.name=='tokenizer_config.json':
       obj=json.loads(path.read_text());assert obj['add_bos_token'] is False;obj['add_bos_token']=True
       data=(json.dumps(obj,ensure_ascii=False,indent=2)+'\n').encode()
       if dest.exists() and dest.read_bytes()!=data:raise ValueError('Unexpected derived tokenizer config')
       dest.write_bytes(data)
      elif dest.exists():
       if not os.path.samefile(path,dest):raise ValueError('Expected same-filesystem hardlink '+str(dest))
      else:os.link(path,dest)
     fetch('encoding/encoding_dsv32.py',14317,'5e068c2ba2a6e5ebe37a49bb005650c507e7935d77a32f3f7c11ee071498b370')
     pathlib.Path('encoding_dsv32.py').write_bytes(pathlib.Path('native/encoding/encoding_dsv32.py').read_bytes())
     pathlib.Path('native-asset-manifest.json').write_text(json.dumps(files,indent=2)+'\n')
     pathlib.Path('derived-tokenizer-config-audit.json').write_text(json.dumps({'nativeSha256':AUX['tokenizer_config.json'][1],'derivedSha256':digest(out/'tokenizer_config.json')[1],'onlySemanticChange':{'add_bos_token':[False,True]},'reason':'Pinned converter assertion; serving uses exact native Python encoder and raw IDs with add_special false.'},indent=2)+'\n')
     print('All163 native shards and exact auxiliary files pass. Native files unchanged; conversion-only tokenizer flag recorded.')
    if __name__=='__main__':main()
    PYASSETS

    Expected result: Verifier saved. No model files are downloaded until the next reader-run step.

  2. 2. Download all native shards and prepare a separate conversion input

    Run only after checking at least 3.5 TiB initially free on the 4 TiB working disk. Existing files must match exact metadata. Hardlinks avoid a second full native copy on this filesystem; the derived tokenizer configuration changes only the required BOS flag. Any failure stops setup.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    python3 reader_assets.py

    Expected result: All 163 native shards, index and auxiliary checks pass. Native bytes remain unchanged. The derived tokenizer configuration audit records its exact hash and sole flag change; original weight total is 689,483,049,129 bytes.

  3. 3. Convert the complete original checkpoint and quantize every split

    Reader operation only. Default lazy conversion preserves all main and NextN tensors; never pass no-mtp or mtp-only options. F16 output and final Q4 files coexist with native input, so monitor disk and memory and stop on exhaustion. No completed conversion or fit is preclaimed.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    .venv/bin/python llama.cpp/convert_hf_to_gguf.py conversion-input --outfile models/DeepSeek-V3.2-Native-F16.gguf --outtype f16 --split-max-size 40G
    FIRST_F16="$(find models -maxdepth 1 -name 'DeepSeek-V3.2-Native-F16-00001-of-*.gguf' -print)"
    test -n "$FIRST_F16"
    ./llama.cpp/build/bin/llama-quantize --keep-split "$FIRST_F16" models/DeepSeek-V3.2-Native-Q4_K_M.gguf Q4_K_M 64

    Expected result: Full F16 and Q4 split files are generated if reader conversion succeeds. Actual split counts, bytes and digests are unknown until execution; a partial file set is not a usable model.

  4. 4. Audit complete generated architecture and record output hashes

    Save and run the exact metadata-only reader audit. Full model architecture/DSA KV must be in the first generated split; later parts contain split metadata. Every ordered split must be present and the combined main-layer DSA/NextN tensor set complete. Record actual streamed hashes/bytes; no quality or fit result follows.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    cat > reader-check-gguf.py <<'PYGGUF'
    """Reader-only generated GGUF metadata and streaming-digest audit; no model inference."""
    import glob,json,pathlib,sys
    from reader_assets import digest
    
    def inspect(readers):
     if not readers:raise ValueError('No generated split files')
     names=set()
     expected={'general.architecture':'deepseek32','deepseek32.block_count':62,'deepseek32.nextn_predict_layers':1,'deepseek32.expert_count':256,'deepseek32.attention.indexer.head_count':64,'deepseek32.attention.indexer.key_length':128,'deepseek32.attention.indexer.top_k':2048}
     for i,r in enumerate(readers):
      for key,value in expected.items():
       f=r.get_field(key)
       # Exact writer/quantizer stores full model KV only in the first split.
       if (i==0 and f is None) or (f is not None and f.contents()!=value):raise ValueError('Wrong full architecture metadata '+key)
      f=r.get_field('split.count');n=r.get_field('split.no')
      if len(readers)>1 and (f is None or f.contents()!=len(readers) or n is None or n.contents()!=i):raise ValueError('Missing or misordered split')
      for t in r.tensors:
       if t.name in names:raise ValueError('Duplicate generated tensor')
       names.add(t.name)
     for layer in range(61):
      for suffix in ('indexer.k_norm.weight','indexer.k_norm.bias','indexer.proj.weight','indexer.attn_k.weight','indexer.attn_q_b.weight'):
       if 'blk.'+str(layer)+'.'+suffix not in names:raise ValueError('Missing native DSA indexer tensor')
     if not any(n.startswith('blk.61.') for n in names):raise ValueError('Missing appended NextN tensors')
     return len(names)
    
    def main():
     # Import only when reader runs after conversion. Author never imports gguf/native dependencies.
     import gguf
     files=sorted(glob.glob('models/DeepSeek-V3.2-Native-Q4_K_M*.gguf'))
     readers=[gguf.GGUFReader(f,'r') for f in files]
     count=inspect(readers)
     manifest=[]
     for f in files:
      n,h=digest(f);manifest.append({'name':f,'bytes':n,'sha256':h})
     pathlib.Path('generated-gguf-manifest.json').write_text(json.dumps({'nativeRevision':'a7e62ac04ecb2c0a54d736dc46601c5606cf10a6','tensorCount':count,'files':manifest},indent=2)+'\n')
     pathlib.Path('first-model-path').write_text(files[0]+'\n')
     print('All generated splits retain deepseek32, DSA indexer fields/tensors and appended NextN; actual output hashes recorded. This is not fit, speed or quantization-quality proof.')
    if __name__=='__main__':main()
    PYGGUF
    PYTHONPATH=llama.cpp/gguf-py .venv/bin/python reader-check-gguf.py

    Expected result: Generated manifest and first-model-path are recorded after all architecture/composition checks. No inference or quantization-quality conclusion follows.

Configure

  1. 1. Create a private service credential

    Generate a reader-owned local service password, preserving an existing key on repeat setup. Never print or share it; this is not a provider API credential.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    umask 077
    if [ ! -e .api-key ]; then openssl rand -hex 32 > .api-key; fi
    test -s .api-key
    chmod 600 .api-key

    Expected result: A nonempty mode-600 private .api-key exists; existing key preserved.

  2. 2. Save bounded native V3.2 conversation diagnostic

    Save exact stdlib client. Reader alone imports the separately checksum-verified native encoder/parser. Ordinary chat and thinking follow-up validate full history, one BOS, input/output reserve, true EOS, no truncation and strict native parsing. Author never executes the encoder or model.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    cat > reasoning-client.py <<'PYCLIENT'
    """Private native DeepSeek V3.2 raw-completion diagnostic; stdlib only."""
    import hashlib, importlib.util, json, pathlib, urllib.request, urllib.error
    BASE='http://127.0.0.1:8080'
    CONTEXT, OUTPUT = 8192, 2048
    ENCODER_SHA='5e068c2ba2a6e5ebe37a49bb005650c507e7935d77a32f3f7c11ee071498b370'
    BOS='<|begin▁of▁sentence|>'
    EOS='<|end▁of▁sentence|>'
    
    def positive(v): return type(v) is int and v>0
    
    def checked_messages(messages):
        if not isinstance(messages,list) or not 1<=len(messages)<=12: raise ValueError('Bounded conversation required')
        for i,m in enumerate(messages):
            if not isinstance(m,dict) or set(m)-{'role','content'}: raise ValueError('Only ordinary text conversation is accepted by this diagnostic')
            role,text=m.get('role'),m.get('content')
            if role not in ('system','user','assistant') or (role=='system' and i!=0): raise ValueError('Invalid role order')
            if not isinstance(text,str) or not text.strip() or len(text.encode())>12000: raise ValueError('Invalid text')
            if any(t in text for t in (BOS,EOS,'<|User|>','<|Assistant|>','<think>','</think>','|DSML|')): raise ValueError('Reserved native control marker in user content')
        roles=[m['role'] for m in messages if m['role']!='system']
        if not roles or roles!=['user' if i%2==0 else 'assistant' for i in range(len(roles))] or roles[-1]!='user': raise ValueError('Alternating user/assistant history ending in user required')
        return messages
    
    def complete(call,encode,parse,messages,mode):
        if mode not in ('thinking','chat'): raise ValueError('Invalid native mode')
        checked_messages(messages)
        prompt=encode(messages,thinking_mode=mode,drop_thinking=True,add_default_bos_token=True)
        if not isinstance(prompt,str) or not prompt.startswith(BOS) or prompt.count(BOS)!=1: raise ValueError('Exactly one native BOS required')
        expected='<think>' if mode=='thinking' else '</think>'
        if not prompt.endswith(expected): raise ValueError('Native mode prefix mismatch')
        ids=call('/tokenize',{'content':prompt,'add_special':False,'parse_special':True}).get('tokens')
        if not isinstance(ids,list) or not ids or any(type(x)is not int or x<0 for x in ids) or ids[0]!=0 or ids.count(0)!=1: raise ValueError('Invalid token IDs or duplicate BOS')
        if len(ids)+OUTPUT>CONTEXT: raise ValueError('Input plus complete reasoning/output reserve exceeds context')
        body={'prompt':ids,'n_predict':OUTPUT,'temperature':1.0,'top_p':0.95,'top_k':0,'min_p':0,'repeat_penalty':1,'stream':False,'cache_prompt':False,'return_tokens':True,'stop':[]}
        result=call('/completion',body)
        if result.get('stop_type')!='eos' or result.get('truncated') is not False: raise ValueError('Require actual native EOS without truncation; limit/word stop does not prove completion')
        n=result.get('tokens_predicted')
        if not positive(n) or n>OUTPUT or result.get('tokens_evaluated')!=len(ids): raise ValueError('Usage mismatch')
        text=result.get('content')
        if not isinstance(text,str) or not text.strip(): raise ValueError('Empty completion')
        # Native server normally omits the EOS text. Reconstitute it only after actual EOS proof.
        if EOS in text and not text.endswith(EOS): raise ValueError('Unexpected internal EOS')
        serialized=text if text.endswith(EOS) else text+EOS
        parsed=parse(serialized,thinking_mode=mode)
        if not isinstance(parsed,dict) or parsed.get('tool_calls') or not isinstance(parsed.get('content'),str) or not parsed['content'].strip(): raise ValueError('Nonempty final text with no tools required')
        if mode=='thinking' and (not isinstance(parsed.get('reasoning_content'),str) or not parsed['reasoning_content'].strip() or '</think>' not in text): raise ValueError('Unclosed or empty native reasoning')
        return {'mode':mode,'inputTokens':len(ids),'outputCap':OUTPUT,'parsed':parsed,'nativeResponse':result}
    
    def http_call(key):
        def call(path,body=None):
            data=None if body is None else json.dumps(body).encode()
            req=urllib.request.Request(BASE+path,data=data,headers={'Authorization':'Bearer '+key,'Content-Type':'application/json'})
            with urllib.request.urlopen(req,timeout=7200) as r:
                if r.status!=200: raise ValueError('HTTP failure')
                raw=r.read(2000001)
            if len(raw)>2000000: raise ValueError('Response limit')
            obj=json.loads(raw)
            if not isinstance(obj,dict): raise ValueError('JSON object required')
            return obj
        return call
    
    def main():
        key=pathlib.Path('.api-key').read_text().strip()
        if len(key)!=64 or any(c not in '0123456789abcdef' for c in key): raise ValueError('Restore private service key')
        path=pathlib.Path('encoding_dsv32.py')
        if hashlib.sha256(path.read_bytes()).hexdigest()!=ENCODER_SHA: raise ValueError('Native encoder checksum mismatch')
        spec=importlib.util.spec_from_file_location('pinned_native_encoding',path)
        native=importlib.util.module_from_spec(spec);spec.loader.exec_module(native)
        call=http_call(key);call('/health')
        req=urllib.request.Request(BASE+'/completion',data=b'{}',headers={'Content-Type':'application/json'})
        try:
            with urllib.request.urlopen(req,timeout=30): raise ValueError('Unauthorized completion accepted')
        except urllib.error.HTTPError as e:
            if e.code!=401: raise
        history=[{'role':'user','content':'The community library is open weekdays 9am to 6pm, Saturday 10am to 4pm and closed Sunday. State the weekday opening time only.'}]
        first=complete(call,native.encode_messages,native.parse_message_from_completion_text,history,'chat')
        pathlib.Path('chat-response.json').write_text(json.dumps(first,indent=2)+'\n')
        history += [{'role':'assistant','content':first['parsed']['content']},{'role':'user','content':'Using the same supplied schedule, how many hours is the library open on Saturday, and is it open on Sunday? Explain briefly.'}]
        second=complete(call,native.encode_messages,native.parse_message_from_completion_text,history,'thinking')
        pathlib.Path('thinking-response.json').write_text(json.dumps(second,indent=2)+'\n')
        print(json.dumps({'chat':first,'thinking':second},ensure_ascii=False))
        print('Manually inspect supplied schedule facts and reasoning. Native EOS/closed thinking proves completion shape, not answer quality or speed.')
    if __name__=='__main__': main()
    PYCLIENT

    Expected result: Client saved without encoder or model execution. Exact native encoding file was separately checksum-verified.

Start the model

  1. 1. Serve complete native-converted V3.2 with DSA

    Keep the native service foreground and preserve logs. Generated first split loads the complete audited composition. All main DSA/MLA and experts remain; NextN tensors are retained without requesting speculative MTP. Native Python encoding supplies complete raw token IDs rather than a Jinja substitute.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    export DEEPSEEK_NATIVE_SERVICE_KEY="$(cat .api-key)"
    ./llama.cpp/build/bin/llama-server -m "$(cat first-model-path)" --alias deepseek-v32-native --host 127.0.0.1 --port 8080 --api-key-file .api-key --device none -ngl 0 -t 64 -c 8192 -np 1 -n 2048 --no-context-shift --flash-attn off --cache-type-k f16 --cache-type-v f16 -b 256 -ub 256 --special --temp 1.0 --top-p 0.95 --top-k 0 --min-p 0 --repeat-penalty 1

    Expected result: If successful, complete DEEPSEEK32 DSA initializes and authenticated loopback becomes ready. Architecture, split, tokenizer or resource errors require stopping; no author load or fit result exists.

Connect to your endpoint

http://127.0.0.1:8080/completion

VM loopback only. Run diagnostics inside the VM; a trusted client may use the explicit SSH tunnel.

Access: loopback. Reader-generated private Bearer key protects raw completion and tokenizer routes. Health is public on loopback. Process arguments and files require a trusted host; privileged local users are outside this access boundary.

Verify the setup

  1. 1. Verify native ordinary chat, reasoning, history and actual completion

    Use a second shell on this host; cloud diagnostics run inside the VM with its files/key. The client checks health and unauthorized401, then exact native encoding for ordinary chat and thinking follow-up with history. Full prompt and output reserve are counted before generation. Require actual EOS, closed thinking and nonempty final text; inspect supplied schedule facts manually.

    Command
    set -e
    cd "$HOME/deepseek-v32-native-hosting"
    python3 reasoning-client.py

    Expected result: Both native modes complete with actual EOS, matching usage and no truncation. Inspect weekday/Saturday/Sunday facts in saved outputs; protocol shape is not semantic correctness, speed or general reasoning quality.

  2. 2. Reach the private service through SSH

    From a trusted client terminal use an existing SSH key and the exact VM host. Keep the tunnel open; the supplied diagnostic runs inside the VM. A separate local client must securely use the matching service key. Do not expose the native inference port publicly.

    Command
    ssh -i /path/to/existing-key.pem -N -L 8080:127.0.0.1:8080 ubuntu@YOUR_EXISTING_INSTANCE_HOST

    Expected result: Client loopback forwards to this VM loopback. Closing the tunnel does not stop server compute or storage billing.

Performance evidence

No compatible measurement available. Documented support and estimated memory do not establish response speed.

Limits and troubleshooting

  • Documented source qualification only: no native dependencies imported, weights downloaded, conversion/build/model load/inference performed or fit/speed/quality measured.
  • Exact ordinary V3.2 native checkpoint and authoritative14,317-byte Python encoder/parser are independently pinned. Exp and Speciale are distinct checkpoints; no sibling template or artifact substitutes here.
  • All 163 native shards total 689,483,049,129 bytes. Reader-produced F16/Q4 outputs have unknown actual sizes/digests until successful execution; all expert and DSA tensors must remain.
  • The native 61 main layers plus appended NextN layer are retained by default conversion. Main branding 671B/37B-active differs from 685,355,329,792 total parameter metadata; routing activity is not resident weight size.
  • Native config independently declares DEEPSEEK32 DSA/MLA. Exact pinned converter and runtime preserve its native architecture and complete input composition; no derivative with unqualified or removed DSA is used.
  • Native config maximum positions 163,840 and tokenizer maximum 131,072 are source metadata, not tested serving limits. Author selects 8,192 combined tokens and 2,048 generated reasoning/final tokens; this is not the publisher full-reasoning recommendation.
  • DSA indexer selects up to 2,048 prior positions with 64 heads of 128 dimensions. MLA/indexer cache and scratch require separate memory; no dense ordinary KV estimate or sparse speed claim is made.
  • Only a separate conversion tokenizer copy changes add_bos_token true for the converter assertion. Native original and Python encoder are unchanged. Serving raw tokenization disables added specials and checks exactly one BOS.
  • 512 GiB RAM and 4 TiB working disk are planning allocations, not proven peak bounds. Source weights, F16 intermediate, Q4 outputs and dependencies coexist. Stop on allocation/disk errors and preserve logs.
  • Torch 2.11 official CPU wheel supports exact dtype conversion; resolved remaining conversion dependencies are reader-installed and logged, not a fully agent-executed environment or compatibility result.
  • Private loopback plus Bearer key requires a trusted host; privileged local users remain outside this boundary. Public TLS, multiuser isolation, tools, native GPU/distribution, full context and speculative MTP remain separate open scopes; required guide total is null.
Native checksum, missing shard or generated architecture mismatch
Stop and preserve the failed check. Require all exact native assets and generated deepseek32 DSA metadata/tensors. Do not disable sparse attention or substitute an unrelated checkpoint.
Converter BOS assertion
Use separate conversion inputs and the recorded sole BOS-flag change; never edit pinned original tokenizer metadata. Native Python encoding supplies exactly one BOS and raw serving token IDs.
Memory, disk or native runtime failure
Stop. Planning capacity does not prove conversion or serving fit. Preserve logs and actual resource usage for a separately reviewed plan.
Length stop, open thinking or empty final body
Treat verification as failed. Require actual EOS and closed nonempty reasoning/final text; no silent truncation or fabricated answer-quality claim.
Unauthorized or unreachable service
Check exact foreground process, loopback address and matching reader key. Keep public inference ingress closed; cloud access uses SSH.

Stop the model

  1. 1. Stop the native service

    Press Ctrl+C in the foreground server shell; close any SSH tunnel with Ctrl+C and unset the key in every shell. Confirm the intended listener is gone. Cloud billing requires the separate resource lifecycle step.

    Command
    unset DEEPSEEK_NATIVE_SERVICE_KEY
    if curl --silent --max-time 3 http://127.0.0.1:8080/health >/dev/null; then echo "Endpoint still responds: stop intended process"; exit 1; else echo "Endpoint no longer responds"; fi

    Expected result: The intended loopback service no longer responds; cloud compute/storage may still bill.

Uninstall

  1. 1. Remove dedicated walkthrough files

    Back up wanted results and logs and confirm the dedicated path before removal. Shared system build packages remain installed.

    Command
    rm -r -- "$HOME/deepseek-v32-native-hosting"

    Expected result: Dedicated native shards, derived conversion inputs, generated model files, dependency environment, client, key, results and build files are removed; shared system packages remain.

Shut down cloud resources

  1. 1. End cloud resource billing

    In EC2 us-east-1 stop this exact VM for later reuse or terminate it. Review root-volume Delete on termination and remove unwanted detached volumes, snapshots and reserved/Elastic/public IP resources. Stopped-instance storage and retained resources may still bill. Check Bills/Cost Explorer for final usage.

    Expected result: The exact instance is stopped or terminated as intended, and unwanted retained billed resources are removed. Stopping the native service alone does not end compute billing.

Sources and verification

Sources checked Oct 17, 2026. Verification source

Compare this configuration

Benchmarks

Performance scores for DeepSeek V3.2 across standard benchmarks.

MMLU-Prodeepseek · Dec 2025
85
GPQA Diamonddeepseek · Dec 2025
82.4
AIME 2025deepseek · Dec 2025
93.1
LiveCodeBenchdeepseek · Dec 2025
83.3
SWE-bench Verifieddeepseek · Dec 2025
73.1
HLEdeepseek · Dec 2025
25.1
BrowseCompdeepseek · Dec 2025
51.4
GPQA DiamondArtificial Analysis
75.1%
AIME 2025Artificial Analysis
59%

Pricing

Token pricing for DeepSeek V3.2 API usage.

Input Tokens

$0.26/M

per million tokens

Output Tokens

$0.42/M

per million tokens

Cache read: $0.1350/M tokens

Competing Models

Same pricing tier — direct alternatives to DeepSeek V3.2

Efficiency
DeepSeek logo
DeepSeekPrivately Held

Unravel the mystery of AGI with curiosity.

1 Tools6 ModelsFounded 2023Hangzhou, China
View full profile

Tools by DeepSeek

Other AI tools from the same organization.

AI Models by DeepSeek

AI models from the same organization.

ModelContext WindowPrice (In / Out per M)
DeepSeek V4 ProCurrent1.0M$1.32 / $3.96
DeepSeek V3.2 SpecialeCurrent164K$0.40 / $1.20
DeepSeek V3.2 ExpCurrent164K$0.27 / $0.41
DeepSeek V3.1 TerminusCurrent164K$0.21 / $0.79
DeepSeek V4 Flash 0731Deprecated1.0MDeprecated

Related News

Latest coverage and updates.