一、前言

随着大语言模型(LLM)技术的快速发展,如何高效地在本地或私有服务器上部署和推理这些模型,已成为 AI 工程实践中的核心议题。相较于传统的 Transformers 推理方案,SGLang 作为一个专为 LLM 和视觉语言模型(VLM)设计的高性能推理框架,凭借其卓越的吞吐量和低延迟特性,正在获得越来越多开发者的青睐。

本文将基于实际部署经验,详细介绍如何在本地服务器(单卡 NVIDIA A800-SXM4-80GB)上使用 SGLang 部署 Qwen3-8B 模型,涵盖环境配置、模型下载、服务启动、性能监控及 API 调用等完整流程。


二、SGLang 技术背景

SGLang 是由 LMSYS Org 开发的开源推理引擎,其核心优势包括:

  • RadixAttention 注意力机制:通过智能的 KV Cache 复用策略,显著提升多轮对话和并行请求的吞吐量。
  • 高效的后端支持:默认集成 FlashInfer 注意力后端,针对 NVIDIA GPU 进行了深度优化。
  • 兼容 OpenAI API:原生支持 /v1/completions/v1/chat/completions 接口,便于现有应用无缝迁移。
  • 结构化生成支持:内置 XGrammar 引擎,支持 JSON Schema 约束输出和函数调用(Tool Calling)。

对于需要私有化部署且对推理性能有较高要求的场景,SGLang 是一个值得优先考虑的方案。


三、环境准备

3.1 基础依赖安装

首先确保 Python 环境(建议 3.10+)已就绪,然后安装核心依赖。为加速下载,此处使用清华 PyPI 镜像源:

pip install torch==2.6.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers==4.51.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install "sglang[all]>=0.4.6.post2" -i https://pypi.tuna.tsinghua.edu.cn/simple

版本说明:

  • torch==2.6.0:与 SGLang 0.4.6.post2 兼容的 PyTorch 版本
  • transformers==4.51.0:确保 Qwen3 模型架构的解析支持
  • sglang[all]:安装完整功能,包括 FlashInfer、多模态支持等

⚠️ 注意:SGLang 官方已推荐使用 sglang serve 作为新的入口命令,但 python -m sglang.launch_server 仍向后兼容。


四、模型获取

由于 Hugging Face 在国内访问可能存在网络限制,我们采用 ModelScope(魔搭社区) 作为模型下载源。以下是下载脚本 download.py

from modelscope import snapshot_download

model_dir = snapshot_download(
    'Qwen/Qwen3-8B',
    cache_dir='./',
    revision='master'
)
print('model_dir:', model_dir)

执行后,模型将被下载至 ./Qwen/Qwen3-8B 目录。Qwen3-8B 采用 Safetensors 格式分片存储,共 5 个权重文件,总大小约 16GB(8B 参数以 BF16 存储)。

下载过程概览:

  • 分片文件:model-00001-of-00005.safetensorsmodel-00005-of-00005.safetensors
  • 配置文件:config.jsongeneration_config.jsonmodel.safetensors.index.json
  • 词表文件:tokenizer.jsonvocab.jsonmerges.txt

五、服务启动与配置

5.1 单卡部署命令

在 A800 80GB 显存的服务器上,执行以下命令启动服务:

python3 -m sglang.launch_server \
    --model ./Qwen/Qwen3-8B \
    --host 0.0.0.0 \
    --port 8123

关键参数解析:

参数 说明
--model 模型权重所在路径
--host 0.0.0.0 监听所有网络接口,允许外部访问
--port 8123 服务暴露端口
--tp-size 张量并行数(默认 1,即单卡)
--mem-fraction-static 静态显存分配比例(默认 0.83)

5.2 启动日志解读

服务启动过程中,SGLang 会依次完成以下初始化步骤:

  1. 模型检测:自动识别模型架构为 Qwen3ForCausalLM,并加载对应对话模板。
  2. 推理配置检测
    • 推理解析器(Reasoning Parser):qwen3 —— 支持 Qwen3 的 thinking 内容解析
    • 工具调用解析器(Tool-call Parser):qwen —— 支持函数调用
  3. 权重加载:多线程加载 5 个 Safetensors 分片,耗时约 63.55 秒,显存占用 15.28 GB
  4. KV Cache 预分配:分配 BF16 类型的 KV Cache,支持最大 364,606 tokens,占用显存 50.08 GB(K/V 各 25.04 GB)。
  5. CUDA Graph 捕获:为提升小批量推理效率,预编译并捕获了 36 个 batch size(1~256)和 58 个 token 长度(4~8192)的 CUDA 图,耗时约 105 秒

启动信息如下:

➜  /workspace git:(master) ✗ conda activate sglang
(sglang) ➜  /workspace git:(master) ✗ python3 -m sglang.launch_server --model ./Qwen/Qwen3-8B --host 0.0.0.0 --port 8123
/root/miniconda/envs/sglang/lib/python3.11/site-packages/sglang/launch_server.py:54: UserWarning: 'python -m sglang.launch_server' is still supported, but 'sglang serve' is the recommended entrypoint.
  Example: sglang serve --model-path <model> [options]
  warnings.warn(
[2026-05-26 10:31:48] Attention backend not specified. Use flashinfer backend by default.
[2026-05-26 10:31:49] server_args=ServerArgs(model_path='./Qwen/Qwen3-8B', tokenizer_path='./Qwen/Qwen3-8B', tokenizer_mode='auto', tokenizer_backend='huggingface', tokenizer_worker_num=1, detokenizer_worker_num=1, skip_tokenizer_init=False, load_format='auto', model_loader_extra_config='{}', trust_remote_code=False, context_length=None, is_embedding=False, prefill_only_disable_kv_cache=False, enable_multimodal=None, revision=None, model_impl='auto', model_config_parser='auto', host='0.0.0.0', port=8123, fastapi_root_path='', grpc_mode=False, skip_server_warmup=False, warmups=None, nccl_port=None, checkpoint_engine_wait_weights_before_ready=False, ssl_keyfile=None, ssl_certfile=None, ssl_ca_certs=None, ssl_keyfile_password=None, enable_ssl_refresh=False, enable_http2=False, dtype='auto', quantization=None, quantization_param_path=None, kv_cache_dtype='auto', enable_fp32_lm_head=False, modelopt_quant=None, modelopt_checkpoint_restore_path=None, modelopt_checkpoint_save_path=None, modelopt_export_path=None, quantize_and_serve=False, rl_quant_profile=None, mem_fraction_static=0.83, max_running_requests=None, max_queued_requests=None, max_total_tokens=None, chunked_prefill_size=8192, enable_dynamic_chunking=False, max_prefill_tokens=16384, prefill_max_requests=None, schedule_policy='fcfs', enable_priority_scheduling=False, disable_priority_preemption=False, default_priority_value=None, abort_on_priority_when_disabled=False, schedule_low_priority_values_first=False, priority_scheduling_preemption_threshold=10, schedule_conservativeness=1.0, page_size=1, swa_full_tokens_ratio=0.8, disable_hybrid_swa_memory=False, radix_eviction_policy='lru', enable_prefill_delayer=False, prefill_delayer_max_delay_passes=30, prefill_delayer_token_usage_low_watermark=None, prefill_delayer_forward_passes_buckets=None, prefill_delayer_wait_seconds_buckets=None, prefill_delayer_queue_min_ratio=None, prefill_delayer_max_delay_ms=None, device='cuda', tp_size=1, pp_size=1, pp_max_micro_batch_size=None, pp_async_batch_depth=0, stream_interval=1, batch_notify_size=16, stream_response_default_include_usage=False, incremental_streaming_output=False, enable_streaming_session=False, random_seed=530570303, constrained_json_whitespace_pattern=None, constrained_json_disable_any_whitespace=False, watchdog_timeout=300, soft_watchdog_timeout=None, dist_timeout=None, download_dir=None, model_checksum=None, base_gpu_id=0, gpu_id_step=1, sleep_on_idle=False, use_ray=False, custom_sigquit_handler=None, log_level='info', log_level_http=None, log_requests=False, log_requests_level=2, log_requests_format='text', log_requests_target=None, uvicorn_access_log_exclude_prefixes=[], crash_dump_folder=None, show_time_cost=False, enable_metrics=False, grpc_http_sidecar_port=None, enable_mfu_metrics=False, enable_metrics_for_all_schedulers=False, tokenizer_metrics_custom_labels_header='x-custom-labels', tokenizer_metrics_allowed_custom_labels=None, extra_metric_labels=None, bucket_time_to_first_token=None, bucket_inter_token_latency=None, bucket_e2e_request_latency=None, prompt_tokens_buckets=None, generation_tokens_buckets=None, gc_warning_threshold_secs=0.0, decode_log_interval=40, enable_request_time_stats_logging=False, kv_events_config=None, enable_forward_pass_metrics=False, forward_pass_metrics_worker_id='', forward_pass_metrics_ipc_name=None, enable_trace=False, otlp_traces_endpoint='localhost:4317', export_metrics_to_file=False, export_metrics_to_file_dir=None, api_key=None, admin_api_key=None, served_model_name='./Qwen/Qwen3-8B', weight_version='default', chat_template=None, hf_chat_template_name=None, completion_template=None, file_storage_path='sglang_storage', enable_cache_report=False, reasoning_parser=None, strip_thinking_cache=False, enable_strict_thinking=False, tool_call_parser=None, tool_server=None, sampling_defaults='model', dp_size=1, load_balance_method='round_robin', attn_cp_size=1, moe_dp_size=1, dist_init_addr=None, nnodes=1, node_rank=0, json_model_override_args='{}', preferred_sampling_params=None, enable_lora=None, enable_lora_overlap_loading=None, max_lora_rank=None, lora_target_modules=None, lora_paths=None, max_loaded_loras=None, max_loras_per_batch=8, lora_eviction_policy='lru', lora_backend='csgmv', max_lora_chunk_size=16, experts_shared_outer_loras=None, lora_use_virtual_experts=False, lora_strict_loading=False, lora_drain_wait_threshold=0.0, attention_backend='flashinfer', decode_attention_backend=None, prefill_attention_backend=None, sampling_backend='flashinfer', grammar_backend='xgrammar', mm_attention_backend=None, fp8_gemm_runner_backend='auto', fp4_gemm_runner_backend='auto', nsa_prefill_backend=None, nsa_decode_backend=None, disable_flashinfer_autotune=False, mamba_backend='triton', speculative_algorithm=None, speculative_draft_model_path=None, speculative_draft_model_revision=None, speculative_draft_load_format=None, speculative_num_steps=None, speculative_eagle_topk=None, speculative_num_draft_tokens=None, speculative_dflash_block_size=None, speculative_accept_threshold_single=1.0, speculative_accept_threshold_acc=1.0, speculative_token_map=None, speculative_attention_mode='prefill', speculative_draft_attention_backend=None, speculative_draft_window_size=None, speculative_moe_runner_backend='auto', speculative_moe_a2a_backend=None, speculative_draft_model_quantization=None, speculative_adaptive=False, speculative_adaptive_config=None, speculative_skip_dp_mlp_sync=False, speculative_ngram_min_bfs_breadth=1, speculative_ngram_max_bfs_breadth=10, speculative_ngram_match_type='BFS', speculative_ngram_max_trie_depth=18, speculative_ngram_capacity=10000000, speculative_ngram_external_corpus_path=None, speculative_ngram_external_sam_budget=0, speculative_ngram_external_corpus_max_tokens=10000000, enable_multi_layer_eagle=False, ep_size=1, moe_a2a_backend='none', moe_runner_backend='auto', record_nolora_graph=True, flashinfer_mxfp4_moe_precision='default', enable_flashinfer_allreduce_fusion=False, enforce_disable_flashinfer_allreduce_fusion=False, enable_aiter_allreduce_fusion=False, deepep_mode='auto', ep_num_redundant_experts=0, ep_dispatch_algorithm=None, init_expert_location='trivial', enable_eplb=False, eplb_algorithm='auto', eplb_rebalance_num_iterations=1000, eplb_rebalance_layers_per_chunk=None, eplb_min_rebalancing_utilization_threshold=1.0, expert_distribution_recorder_mode=None, expert_distribution_recorder_buffer_size=1000, enable_expert_distribution_metrics=False, deepep_config=None, moe_dense_tp_size=None, elastic_ep_backend=None, enable_elastic_expert_backup=False, mooncake_ib_device=None, enable_deepep_waterfill=False, elastic_ep_rejoin=False, max_mamba_cache_size=None, mamba_ssm_dtype=None, mamba_full_memory_ratio=0.9, mamba_scheduler_strategy='no_buffer', mamba_track_interval=256, linear_attn_backend='triton', linear_attn_decode_backend=None, linear_attn_prefill_backend=None, enable_hierarchical_cache=False, hicache_ratio=2.0, hicache_size=0, hicache_write_policy='write_through', hicache_io_backend='kernel', hicache_mem_layout='layer_first', hicache_storage_backend=None, hicache_storage_prefetch_policy='timeout', hicache_storage_backend_extra_config=None, enable_hisparse=False, hisparse_config=None, enable_lmcache=False, kt_weight_path=None, kt_method='AMXINT4', kt_cpuinfer=None, kt_threadpool_count=2, kt_num_gpu_experts=None, kt_max_deferred_experts_per_token=None, dllm_algorithm=None, dllm_algorithm_config=None, cpu_offload_gb=0, offload_group_size=-1, offload_num_in_group=1, offload_prefetch_step=1, offload_mode='cpu', enable_mis=False, disable_radix_cache=False, cuda_graph_max_bs=256, cuda_graph_bs=[1, 2, 4, 8, 12, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, 256], disable_cuda_graph=False, disable_cuda_graph_padding=False, enable_breakable_cuda_graph=False, enable_profile_cuda_graph=False, enable_cudagraph_gc=False, debug_cuda_graph=False, enable_layerwise_nvtx_marker=False, enable_nccl_nvls=False, enable_symm_mem=False, disable_flashinfer_cutlass_moe_fp4_allgather=False, enable_tokenizer_batch_encode=False, disable_tokenizer_batch_decode=False, disable_outlines_disk_cache=False, disable_custom_all_reduce=False, enable_mscclpp=False, enable_torch_symm_mem=False, pre_warm_nccl=False, disable_overlap_schedule=False, enable_mixed_chunk=False, enable_dp_attention=False, enable_dp_attention_local_control_broadcast=False, enable_dp_lm_head=False, enable_two_batch_overlap=False, enable_single_batch_overlap=False, tbo_token_distribution_threshold=0.48, enable_torch_compile=False, disable_piecewise_cuda_graph=False, enforce_piecewise_cuda_graph=False, enable_torch_compile_debug_mode=False, torch_compile_max_bs=32, piecewise_cuda_graph_max_tokens=8192, piecewise_cuda_graph_tokens=[4, 8, 12, 16, 20, 24, 28, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256, 288, 320, 352, 384, 416, 448, 480, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 4608, 5120, 5632, 6144, 6656, 7168, 7680, 8192], piecewise_cuda_graph_compiler='eager', torchao_config='', enable_nan_detection=False, enable_p2p_check=False, triton_attention_reduce_in_fp32=False, triton_attention_num_kv_splits=8, triton_attention_split_tile_size=None, num_continuous_decode_steps=1, delete_ckpt_after_loading=False, enable_memory_saver=False, enable_weights_cpu_backup=False, enable_draft_weights_cpu_backup=False, allow_auto_truncate=False, enable_custom_logit_processor=False, flashinfer_mla_disable_ragged=False, disable_shared_experts_fusion=False, enforce_shared_experts_fusion=False, disable_chunked_prefix_cache=False, disable_fast_image_processor=False, keep_mm_feature_on_device=False, enable_return_hidden_states=False, enable_return_routed_experts=False, enable_return_indexer_topk=False, scheduler_recv_interval=1, numa_node=None, enable_deterministic_inference=False, rl_on_policy_target=None, enable_attn_tp_input_scattered=False, gc_threshold=None, enable_nsa_prefill_context_parallel=False, nsa_prefill_cp_mode='round-robin-split', enable_fused_qk_norm_rope=False, enable_precise_embedding_interpolation=False, enable_fused_moe_sum_all_reduce=False, enable_prefill_context_parallel=False, prefill_cp_mode='in-seq-split', enable_dynamic_batch_tokenizer=False, dynamic_batch_tokenizer_batch_size=32, dynamic_batch_tokenizer_batch_timeout=0.002, debug_tensor_dump_output_folder=None, debug_tensor_dump_layers=None, debug_tensor_dump_input_file=None, debug_tensor_dump_inject=False, disaggregation_mode='null', disaggregation_transfer_backend='mooncake', disaggregation_bootstrap_port=8998, disaggregation_ib_device=None, disaggregation_decode_enable_radix_cache=False, disaggregation_decode_enable_offload_kvcache=False, num_reserved_decode_tokens=512, disaggregation_decode_polling_interval=1, encoder_only=False, language_only=False, encoder_transfer_backend='zmq_to_scheduler', encoder_urls=[], enable_adaptive_dispatch_to_encoder=False, custom_weight_loader=[], weight_loader_disable_mmap=False, weight_loader_prefetch_checkpoints=False, weight_loader_prefetch_num_threads=4, weight_loader_drop_cache_after_load=False, remote_instance_weight_loader_seed_instance_ip=None, remote_instance_weight_loader_seed_instance_service_port=None, remote_instance_weight_loader_send_weights_group_ports=None, remote_instance_weight_loader_backend='nccl', remote_instance_weight_loader_start_seed_via_transfer_engine=False, engine_info_bootstrap_port=6789, modelexpress_config=None, enable_pdmux=False, pdmux_config_path=None, sm_group_num=8, enable_broadcast_mm_inputs_process=False, enable_prefix_mm_cache=False, mm_enable_dp_encoder=False, mm_process_config={}, limit_mm_data_per_request=None, enable_mm_global_cache=False, decrypted_config_file=None, decrypted_draft_config_file=None, forward_hooks=None, enable_quant_communications=False, msprobe_dump_config=None)
[2026-05-26 10:31:57] Using default HuggingFace chat template with detected content format: string
[2026-05-26 10:31:57] Detected reasoning config 'ReasoningToggleConfig(toggle_param='enable_thinking', default_enabled=True, special_case=None)' from template rule 'enable_thinking_default_true'.
[2026-05-26 10:31:57] Detected reasoning parser 'qwen3' from template rule 'qwen3'.
[2026-05-26 10:31:57] Detected tool-call parser 'qwen' from template rule 'qwen'.
[2026-05-26 10:31:57] Auto-detected reasoning parser: qwen3
[2026-05-26 10:31:57] Auto-detected tool-call parser: qwen
[2026-05-26 10:31:59] Init torch distributed begin.
[2026-05-26 10:32:00] Init torch distributed ends. elapsed=0.92 s, mem usage=0.08 GB
[2026-05-26 10:32:02] Load weight begin. avail mem=78.74 GB
Multi-thread loading shards: 100% Completed | 5/5 [00:59<00:00, 11.88s/it]
[2026-05-26 10:33:05] Load weight end. elapsed=63.55 s, type=Qwen3ForCausalLM, avail mem=63.46 GB, mem usage=15.28 GB.
[2026-05-26 10:33:05] Using KV cache dtype: torch.bfloat16
[2026-05-26 10:33:05] KV Cache is allocated. #tokens: 364606, K size: 25.04 GB, V size: 25.04 GB
[2026-05-26 10:33:05] Memory pool end. avail mem=12.61 GB
[2026-05-26 10:33:06] Capture cuda graph begin. This can take up to several minutes. avail mem=12.06 GB
[2026-05-26 10:33:06] Capture cuda graph bs [1, 2, 4, 8, 12, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 120, 128, 136, 144, 152, 160, 168, 176, 184, 192, 200, 208, 216, 224, 232, 240, 248, 256]
Capturing batches (bs=1 avail_mem=11.26 GB): 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 36/36 [01:02<00:00,  1.73s/it]
[2026-05-26 10:34:09] Capture cuda graph end. Time elapsed: 63.08 s. mem usage=0.82 GB. avail mem=11.23 GB.
[2026-05-26 10:34:09] Capture piecewise CUDA graph begin. avail mem=11.23 GB
[2026-05-26 10:34:09] Capture cuda graph num tokens [4, 8, 12, 16, 20, 24, 28, 32, 48, 64, 80, 96, 112, 128, 144, 160, 176, 192, 208, 224, 240, 256, 288, 320, 352, 384, 416, 448, 480, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 1280, 1536, 1792, 2048, 2304, 2560, 2816, 3072, 3328, 3584, 3840, 4096, 4608, 5120, 5632, 6144, 6656, 7168, 7680, 8192]
Compiling num tokens (num_tokens=8192):   0%|                                                                                                                                                         | 0/58 [00:00<?, ?it/s][2026-05-26 10:34:16] Compiling a graph for dynamic shape takes 1.48 s
[2026-05-26 10:34:23] Compiling a graph for dynamic shape takes 1.31 s
Compiling num tokens (num_tokens=4): 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 58/58 [00:21<00:00,  2.72it/s]
Capturing num tokens (num_tokens=4 avail_mem=9.91 GB): 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 58/58 [00:19<00:00,  2.97it/s]
[2026-05-26 10:34:51] Capture piecewise CUDA graph end. Time elapsed: 41.82 s. mem usage=1.33 GB. avail mem=9.91 GB.
[2026-05-26 10:34:52] max_total_num_tokens=364606, chunked_prefill_size=8192, max_prefill_tokens=16384, max_running_requests=4096, context_len=40960, available_gpu_mem=9.91 GB
[2026-05-26 10:34:53] INFO:     Started server process [6088]
[2026-05-26 10:34:53] INFO:     Waiting for application startup.
[2026-05-26 10:34:53] Using default chat sampling params from model generation config: {'temperature': 0.6, 'top_k': 20, 'top_p': 0.95}
[2026-05-26 10:34:53] INFO:     Application startup complete.
[2026-05-26 10:34:53] INFO:     Uvicorn running on http://0.0.0.0:8123 (Press CTRL+C to quit)
[2026-05-26 10:34:54] INFO:     127.0.0.1:37370 - "GET /model_info HTTP/1.1" 200 OK
[2026-05-26 10:35:07] Prefill batch, #new-seq: 1, #new-token: 6, #cached-token: 0, token usage: 0.00, #running-req: 0, #queue-req: 0, #pending-token: 0, cuda graph: True, input throughput (token/s): 0.03
[2026-05-26 10:35:07] INFO:     127.0.0.1:37386 - "POST /generate HTTP/1.1" 200 OK
[2026-05-26 10:35:07] The server is fired up and ready to roll!

最终服务监听在 http://0.0.0.0:8123,并自动采用模型配置中的默认采样参数:

  • temperature: 0.6
  • top_k: 20
  • top_p: 0.95

六、GPU 资源监控

6.1 启动前状态

通过 watch -n 1 nvidia-smi 监控,启动前 A800 处于空闲状态:


Tue May 26 10:31:40 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.65.06              Driver Version: 580.65.06      CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA A800-SXM4-80GB          On  |   00000000:C3:00.0 Off |                    0 |
| N/A   27C    P0             79W /  400W |       4MiB /  81920MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

6.2 启动后状态

服务就绪后,显存占用发生显著变化:

Tue May 26 10:35:00 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.65.06              Driver Version: 580.65.06      CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA A800-SXM4-80GB          On  |   00000000:C3:00.0 Off |                    0 |
| N/A   29C    P0             80W /  400W |   71014MiB /  81920MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

资源分析:

  • 显存占用:约 71 GB / 80 GB,利用率接近 90%。
  • 占用构成
    • 模型权重:~16 GB(BF16)
    • KV Cache:~50 GB(预分配)
    • CUDA Graph 与激活值:~5 GB
  • GPU 利用率:空闲时为 0%,有请求时根据 batch size 和序列长度动态上升。

💡 提示:若显存不足,可通过 --mem-fraction-static 降低 KV Cache 分配比例,或启用 --cpu-offload-gb 进行权重卸载。


七、API 调用与性能测试

7.1 测试脚本

SGLang 完全兼容 OpenAI 的 Completions 接口。以下是测试脚本 test.py

import requests
import time

url = 'http://0.0.0.0:8123/v1/completions'
headers = {"Content-Type": "application/json"}

def query_sglang(
    prompt,
    model_name='qwen3-8b',
    max_tokens=2000,
    temperature=0.7
):
    data = {
        'model': model_name,
        'prompt': prompt,
        'max_tokens': max_tokens,
        'temperature': temperature
    }
    try:
        response = requests.post(
            url, 
            headers=headers, 
            json=data, 
            timeout=60
        )
        response.raise_for_status()
        return response.json()["choices"][0]["text"]
    except requests.exceptions.RequestException as e:
        return f"请求出错: {str(e)}"

# 执行测试
start_time = time.time()
result = query_sglang('解释一下解析几何的基本概念')
end_time = time.time()

print(result)
print('cost_time:', end_time - start_time)

7.2 运行结果

执行 python test.py 后,模型生成了一段详尽的解析几何讲解,涵盖坐标系、点线面、向量、参数方程、几何变换等核心概念。实测端到端耗时:

➜  /workspace git:(master) ✗ python sglang_test.py 
和原理。 解析几何,又称坐标几何,是数学的一个分支,它使用代数的方法来研究几何问题。解析几何的基本概念和原理可以分为以下几个部分:

### 1. 坐标系
解析几何的核心是将几何对象与坐标系相结合。通常使用笛卡尔坐标系(Cartesian coordinate system)来表示点和图形。在二维平面中,点由两个坐标(x, y)表示;在三维空间中,点由三个坐标(x, y, z)表示。

### 2. 点、线、面
- **点**:在解析几何中,点是基本的几何对象,可以用坐标表示。
- **线**:直线可以用方程表示,例如在二维平面上,直线的一般方程为 $ Ax + By + C = 0 $。
- **面**:在三维空间中,平面可以用方程表示,例如 $ Ax + By + Cz + D = 0 $。

### 3. 方程与图形
解析几何通过代数方程来描述几何图形。例如:
- **圆**:在二维平面中,圆的方程为 $ (x - h)^2 + (y - k)^2 = r^2 $,其中 $ (h, k) $ 是圆心,$ r $ 是半径。
- **抛物线**:在二维平面中,抛物线的方程可以表示为 $ y = ax^2 + bx + c $ 或 $ x = ay^2 + by + c $。
- **椭圆**和**双曲线**:这些二次曲线也可以用类似的方程描述。

### 4. 向量
向量是解析几何中的重要工具,用于表示方向和大小。向量可以加减、标量乘法,并且可以进行点积和叉积等运算。向量在解析几何中用于描述点的位置、方向和运动。

### 5. 参数方程和极坐标
- **参数方程**:某些曲线或曲面可以用参数方程表示,例如圆的参数方程为 $ x = r\cos\theta $, $ y = r\sin\theta $。
- **极坐标**:在极坐标系中,点的位置由一个距离(半径)和一个角度表示,例如 $ r $ 和 $ \theta $。

### 6. 几何变换
解析几何中还包括几何变换,如平移、旋转、缩放等。这些变换可以通过矩阵运算来表示,例如旋转矩阵和缩放矩阵。

### 7. 距离和斜率
- **距离公式**:两点 $ (x_1, y_1) $ 和 $ (x_2, y_2) $ 之间的距离为 $ \sqrt{(x_2 - x_1)^2 + (y_2 - y_1)^2} $。
- **斜率**:直线的斜率 $ m $ 为 $ m = \frac{y_2 - y_1}{x_2 - x_1} $。

### 8. 二次曲线和曲面
二次曲线和曲面是解析几何的重要研究对象,包括圆、椭圆、抛物线、双曲线以及它们的三维对应物,如球面、圆柱面、圆锥面等。

### 9. 多变量函数和曲线
解析几何还涉及多变量函数的图像,例如三维空间中的曲面,可以通过方程 $ z = f(x, y) $ 来表示。

### 10. 应用
解析几何在物理、工程、计算机图形学、导航系统等领域有广泛应用,用于解决涉及位置、方向、运动等问题。

解析几何通过将几何问题转化为代数问题,使得几何对象可以用方程和坐标来表示和分析,为数学和科学提供了强大的工具。

### 总结
解析几何的基本原理是通过坐标系将几何对象与代数表达式联系起来,利用代数方法解决几何问题。它涵盖了点、线、面、向量、方程、距离、斜率、几何变换等基本概念,以及二次曲线和曲面等高级内容。解析几何在数学和其他科学领域中具有广泛的应用。


解析几何的基本原理可以总结为以下几点:

1. **坐标系**:通过笛卡尔坐标系将几何对象与坐标联系起来。
2. **代数方法**:使用代数方程来描述和分析几何图形。
3. **几何对象**:包括点、线、面、向量、曲线和曲面等。
4. **方程与图形**:几何图形可以通过代数方程来表示。
5. **变换与运算**:包括平移、旋转、缩放等几何变换,以及向量运算。
6. **距离与斜率**:计算两点之间的距离和直线的斜率。
7. **二次曲线与曲面**:研究圆、椭圆、抛物线、双曲线等二次曲线。
8. **多变量函数**:通过多变量函数描述三维空间中的曲面。
9. **应用**:广泛应用于物理、工程、计算机图形学等领域。

解析几何通过将几何问题转化为代数问题,使得几何对象可以用方程和坐标来表示和分析,为数学和科学提供了强大的工具。


解析几何的基本概念和原理可以简要总结如下:

1. **坐标系**:解析几何的基础是坐标系,特别是笛卡尔坐标系。它将几何对象的位置与坐标对应起来,使得点、线、面等图形可以用代数表达式描述。
2. **点和线**:点用坐标表示,线可以用方程描述(例如直线的一般方程)。
3. **代数方程**:几何图形(如圆、抛物线、椭圆、双曲线等)通过代数方程来表示。
4. **向量**:向量用于描述方向和大小,是解析几何的重要工具。
5. **参数方程和极坐标**:某些图形可以用参数方程或极坐标表示。
6. **几何变换**:包括平移、旋转、缩放等变换,可以通过矩阵运算来实现。
7. **距离和斜率**:两点之间的距离和直线的斜率是解析几何中的基本计算。
8. **二次曲线和曲面**:研究二次曲线和曲面,如圆、椭圆、抛物线、双曲线及其三维对应物。
9. **多变量函数**:通过多变量函数描述三维空间中的曲面。
10. **应用领域**:解析几何在物理、工程、计算机图形学等领域有广泛应用。

解析几何通过将几何问题转化为代数问题,使得几何对象可以用方程和坐标来表示和分析,为数学和科学提供了强大的工具。

### 简明总结
解析几何的核心是将几何对象与坐标系结合,使用代数方法描述和分析几何图形。它通过坐标和方程来研究点、线、面、曲线和曲面等几何对象,涉及向量、参数方程、极坐标、几何变换、距离和斜率等基本概念,并广泛应用于科学和工程领域。其基本原理包括坐标系的使用、代数方程的描述、几何变换以及对二次曲线和曲面的研究。

解析几何的基本概念和原理可以归纳为以下几点:

1. **坐标系**:使用笛卡尔坐标系,将几何对象与坐标对应,如点 $(x, y, z)$。
2. **几何对象**:点、线、面、曲线、曲面等是研究对象。
3. **代数方程**:几何图形通过代数方程表示,例如直线方程、圆的方程等。
4. **向量**:用于描述方向和大小,进行运算如点积、叉积。
5. **参数方程和极坐标**:某些图形可用参数方程或极坐标表示。
6. **几何变换**:包括平移、旋转、缩放等,通过矩阵运算表示。
7. **距离和斜率**:两点间距离公式和直线斜率的计算。
8. **二次曲线和曲面**:研究圆、椭圆、抛物线、双曲线等及其三维对应物。
9. **多变量函数**:三维空间中的曲面可通过 $ z = f(x, y) $ 表示。
10. **应用**:广泛应用于物理、工程、计算机图形学等领域。

解析几何通过代数方法研究几何问题,将几何对象与坐标、方程联系起来,为数学和科学提供重要工具。


解析几何的基本原理和概念可以总结如下:

1. **坐标系**:
   - 解析几何的基础是笛卡尔坐标系,将空间中的点用坐标表示。
   - 在二维空间中,点用 $(x, y)$ 表示;在三维空间中,点用 $(x, y, z)$ 表示。

2. **几何对象**:
   - **点**:表示为坐标,是几何的基本元素。
   - **线**:用方程表示,例如直线的一般方程 $ Ax + By + C = 0 $。
   - **面**:在三维空间中,平面可以用 $ Ax + By + Cz + D = 0 $ 表示。

3. **代数方程
cost_time: 22.422346830368042
➜  /workspace git:(master)

性能分析:

  • 该耗时包含首 token 延迟(TTFT)和后续 token 生成时间。
  • Qwen3-8B 在 A800 上的典型吞吐约为 50~80 tokens/秒(取决于输入长度和 batching 情况)。
  • 若需提升并发性能,可启用 --enable-dp-attention 或调整 --max-running-requests

八、关键配置与调优建议

8.1 多卡并行(Tensor Parallelism)

若拥有多张 GPU,可通过张量并行扩展支持更大模型或更高并发:

python3 -m sglang.launch_server \
    --model ./Qwen/Qwen3-8B \
    --tp-size 2 \
    --host 0.0.0.0 \
    --port 8123

8.2 量化部署

对于显存受限的环境,可启用 FP8/INT8 量化:

sglang serve ./Qwen/Qwen3-8B \
    --quantization fp8 \
    --port 8123

8.3 结构化输出

利用 SGLang 的 XGrammar 后端,可强制模型输出符合 JSON Schema 的数据:

data = {
    "model": "qwen3-8b",
    "prompt": "提取以下文本中的姓名和年龄",
    "response_format": {"type": "json_object"}
}

8.4 生产环境建议

  1. 启用监控指标:添加 --enable-metrics 暴露 Prometheus 指标。
  2. API 密钥保护:使用 --api-key--admin-api-key 限制访问。
  3. 长文本优化:调整 --chunked-prefill-size--max-prefill-tokens 平衡首 token 延迟与吞吐。
  4. 连续批处理:SGLang 默认支持 Continuous Batching,无需额外配置。

九、总结

本文完整演示了基于 SGLang 在本地 A800 服务器上部署 Qwen3-8B 模型的流程。从环境搭建、模型下载到服务启动和 API 调用,SGLang 展现了其作为生产级推理引擎的易用性和高性能特性。

核心要点回顾:

  • 一键启动:仅需指定模型路径即可自动处理模板解析、后端选择和图编译。
  • 显存高效:通过 RadixAttention 和预分配策略,在 80GB 显存上实现了近 90% 的利用率。
  • 生态兼容:完全兼容 OpenAI API 格式,降低应用接入成本。

对于希望构建私有化 LLM 服务的团队,SGLang + Qwen3 的组合提供了一个性能优异、部署简便的解决方案。后续可进一步探索多模态支持(Qwen3-VL)、Speculative Decoding 加速以及分布式部署等高级特性。


参考链接:

  • SGLang 官方文档:https://docs.sglang.ai/
  • Qwen3 技术报告:https://qwenlm.github.io/blog/qwen3/
  • ModelScope 模型库:https://modelscope.cn/models/Qwen/Qwen3-8B
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐