vLLM 部署本地大模型

如何让vllm使用modelscope而不是huggingface来下载模型? 通过上述配置,vLLM会自动从ModelScope镜像源下载模型文件,下载速度相比HuggingFace可提升5-10倍。此变量需在初始化vLLM引擎前生效,可临时设置或写入。方法预下载模型,避免服务启动时的长时间等待。若需自定义模型缓存路径,设置环境变量。,需注意磁盘空间是否充足。在运行vLLM前通过命令。 阅读详情


失业+面试中,今天学习一个新玩具 vLLM

vLLM 是一个快速且易于使用的库,用于 LLM 推理和服务。

1. 安装

pip install -U xformers torch torchvision torchaudio triton --index-url https://download.pytorch.org/whl/cu121
pip install modelscope vllm 

triton 报错的话 可以下载 whl , pip install .\triton-3.0.0-cp312-cp312-win_amd64.whl进行安装
https://hf-mirror.com/madbuda/triton-windows-builds

2. 下载模型

from vllm import LLM, SamplingParams
llm = LLM(model='Qwen/Qwen2.5-1.5B-Instruct')

如果不能连接 huggingface,设置 export VLLM_USE_MODELSCOPE=True

llm = LLM(model='Qwen/Qwen2.5-1.5B-Instruct', trust_remote_code=True, dtype=torch.float16)

输出

Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:11:04,893 - modelscope - INFO - Target directory already exists, skipping creation.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:11:05,514 - modelscope - INFO - Target directory already exists, skipping creation.
WARNING 11-24 21:11:05 config.py:1668] Casting torch.bfloat16 to torch.float16.
INFO 11-24 21:11:05 llm_engine.py:237] Initializing an LLM engine (v0.6.3.post1) with config: model='Qwen/Qwen2.5-1.5B-Instruct', speculative_config=None, tokenizer='Qwen/Qwen2.5-1.5B-Instruct', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, rope_scaling=None, rope_theta=None, tokenizer_revision=None, trust_remote_code=True, dtype=torch.float16, max_seq_len=32768, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=None, enforce_eager=False, kv_cache_dtype=auto, quantization_param_path=None, device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='outlines'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=Qwen/Qwen2.5-1.5B-Instruct, num_scheduler_steps=1, chunked_prefill_enabled=False multi_step_stream_outputs=True, enable_prefix_caching=False, use_async_output_proc=True, use_cached_outputs=False, mm_processor_kwargs=None)
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:11:06,041 - modelscope - INFO - Target directory already exists, skipping creation.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:11:18,283 - modelscope - INFO - Target directory already exists, skipping creation.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:11:18,913 - modelscope - INFO - Target directory already exists, skipping creation.
INFO 11-24 21:11:18 selector.py:224] Cannot use FlashAttention-2 backend for Volta and Turing GPUs.
INFO 11-24 21:11:18 selector.py:115] Using XFormers backend.
INFO 11-24 21:11:19 model_runner.py:1056] Starting to load model Qwen/Qwen2.5-1.5B-Instruct...
INFO 11-24 21:11:20 selector.py:224] Cannot use FlashAttention-2 backend for Volta and Turing GPUs.
INFO 11-24 21:11:20 selector.py:115] Using XFormers backend.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
Downloading [model.safetensors]: 100%|██████████████████████████████████████████████████████████████████████████| 2.88G/2.88G [00:22<00:00, 135MB/s]
2024-11-24 21:12:11,861 - modelscope - INFO - Target directory already exists, skipping creation.
Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]
Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:04<00:00,  4.97s/it]
Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:04<00:00,  4.98s/it]

INFO 11-24 21:12:17 model_runner.py:1067] Loading model weights took 2.8875 GB
INFO 11-24 21:12:23 gpu_executor.py:122] # GPU blocks: 15322, # CPU blocks: 9362
INFO 11-24 21:12:23 gpu_executor.py:126] Maximum concurrency for 32768 tokens per request: 7.48x
INFO 11-24 21:12:28 model_runner.py:1395] Capturing the model for CUDA graphs. This may lead to unexpected consequences if the model is not static. To run the model in eager mode, set 'enforce_eager=True' or use '--enforce-eager' in the CLI.
INFO 11-24 21:12:28 model_runner.py:1399] CUDA graphs can take additional 1~3 GiB memory per GPU. If you are running out of memory, consider decreasing `gpu_memory_utilization` or enforcing eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage.
INFO 11-24 21:12:51 model_runner.py:1523] Graph capturing finished in 23 secs.

生成文本:

output = llm.generate("Hello, my name is")
# Processed prompts: 100%|████████████████████████████████████████| 1/1 [00:00<00:00,  2.42it/s, est. speed input: 12.11 toks/s, output: 38.73 toks/s]
print(output)
# [RequestOutput(request_id=0, prompt='Hello, my name is', 
# prompt_token_ids=[9707, 11, 847, 829, 374], encoder_prompt=None, 
# encoder_prompt_token_ids=None, prompt_logprobs=None, 
# outputs=[CompletionOutput(index=0, text=" Josh and I'm deleting my record from Sonoma County Records website.\nAnswer this", token_ids=(18246, 323, 358, 2776, 33011, 847, 3255, 504, 11840, 7786, 6272, 21566, 3910, 624, 16141, 419), 
# cumulative_logprob=None, logprobs=None, finish_reason=length, stop_reason=None)], finished=True, 
# metrics=RequestMetrics(arrival_time=1732454207.6440513, last_token_time=1732454207.6440513, first_scheduled_time=1732454207.6526544, first_token_time=1732454207.756204, time_in_queue=0.008603096008300781, finished_time=1732454208.0503235, scheduler_time=0.005755523219704628, model_forward_time=None, model_execute_time=None), lora_request=None)]

print(output[0].outputs[0].text)
# Josh and I'm deleting my record from Sonoma County Records website.
# Answer this

3. 批量生成

prompts = [
    "你好,我想吃饭",
    "最近大模型技术很火热",
    "我最近还在找工作,还在面试中",
    "请给我一份工作",
]
sampling_params = SamplingParams(temperature=0.8, top_p=0.95)
outputs = llm.generate(prompts, sampling_params)
# Processed prompts: 100%|███████████████████████████████████████| 4/4 [00:00<00:00,  7.95it/s, est. speed input: 43.74 toks/s, output: 127.23 toks/s]

for output in outputs:
    prompt = output.prompt
    generated_text = output.outputs[0].text
    print(f"Prompt: {prompt!r}, Generated text: {generated_text!r}")

输出:

Prompt: '你好,我想吃饭', Generated text: ',但我又不想吃,这很正常,我们每个人都有时候会感到'
Prompt: '最近大模型技术很火热', Generated text: ',而这类模型都是由大量的数据训练出来的,其背后都是依赖于'
Prompt: '我最近还在找工作,还在面试中', Generated text: ',身上有一块蚊子咬的包,但是不知道是不是蚊子咬'
Prompt: '请给我一份工作', Generated text: '流程的示例。\n一个公司的招聘流程。\n招聘流程通常包括以下几个阶段'

4. 兼容OpenAI服务

命令行输入 vllm serve Qwen/Qwen2.5-1.5B-Instruct --port 9999 --dtype float16

输出

INFO 11-24 21:45:42 api_server.py:528] vLLM API server version 0.6.3.post1
INFO 11-24 21:45:42 api_server.py:529] args: Namespace(allow_credentials=False, allowed_headers=['*'], allowed_methods=['*'], allowed_origins=['*'], api_key=None, block_size=16, chat_template=None, code_revision=None, collect_detailed_traces=None, config='', config_format=<ConfigFormat.AUTO: 'auto'>, cpu_offload_gb=0, device='auto', disable_async_output_proc=False, disable_custom_all_reduce=False, disable_fastapi_docs=False, disable_frontend_multiprocessing=False, disable_log_requests=False, disable_log_stats=False, disable_logprobs_during_spec_decoding=None, disable_sliding_window=False, dispatch_function=<function serve at 0x7fe31b1fe550>, distributed_executor_backend=None, download_dir=None, dtype='float16', enable_auto_tool_choice=False, enable_chunked_prefill=None, enable_lora=False, enable_prefix_caching=False, enable_prompt_adapter=False, enforce_eager=False, fully_sharded_loras=False, gpu_memory_utilization=0.9, guided_decoding_backend='outlines', host=None, ignore_patterns=[], kv_cache_dtype='auto', limit_mm_per_prompt=None, load_format='auto', long_lora_scaling_factors=None, lora_dtype='auto', lora_extra_vocab_size=256, lora_modules=None, max_context_len_to_capture=None, max_cpu_loras=None, max_log_len=None, max_logprobs=20, max_lora_rank=16, max_loras=1, max_model_len=None, max_num_batched_tokens=None, max_num_seqs=256, max_parallel_loading_workers=None, max_prompt_adapter_token=0, max_prompt_adapters=1, max_seq_len_to_capture=8192, middleware=[], mm_processor_kwargs=None, model='Qwen/Qwen2.5-1.5B-Instruct', model_loader_extra_config=None, model_tag='Qwen/Qwen2.5-1.5B-Instruct', multi_step_stream_outputs=True, ngram_prompt_lookup_max=None, ngram_prompt_lookup_min=None, num_gpu_blocks_override=None, num_lookahead_slots=0, num_scheduler_steps=1, num_speculative_tokens=None, otlp_traces_endpoint=None, override_neuron_config=None, pipeline_parallel_size=1, port=9999, preemption_mode=None, prompt_adapters=None, qlora_adapter_name_or_path=None, quantization=None, quantization_param_path=None, ray_workers_use_nsight=False, response_role='assistant', return_tokens_as_token_ids=False, revision=None, root_path=None, rope_scaling=None, rope_theta=None, scheduler_delay_factor=0.0, scheduling_policy='fcfs', seed=0, served_model_name=None, skip_tokenizer_init=False, spec_decoding_acceptance_method='rejection_sampler', speculative_disable_by_batch_size=None, speculative_disable_mqa_scorer=False, speculative_draft_tensor_parallel_size=None, speculative_max_model_len=None, speculative_model=None, speculative_model_quantization=None, ssl_ca_certs=None, ssl_cert_reqs=0, ssl_certfile=None, ssl_keyfile=None, subparser='serve', swap_space=4, tensor_parallel_size=1, tokenizer=None, tokenizer_mode='auto', tokenizer_pool_extra_config=None, tokenizer_pool_size=0, tokenizer_pool_type='ray', tokenizer_revision=None, tool_call_parser=None, tool_parser_plugin='', trust_remote_code=False, typical_acceptance_sampler_posterior_alpha=None, typical_acceptance_sampler_posterior_threshold=None, use_v2_block_manager=False, uvicorn_log_level='info', worker_use_ray=False)
INFO 11-24 21:45:42 api_server.py:166] Multiprocessing frontend to use ipc:///tmp/62833db5-17e8-4805-84ab-dd5641c97de8 for IPC Path.
INFO 11-24 21:45:42 api_server.py:179] Started engine process with PID 3726198
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:45:43,724 - modelscope - INFO - Target directory already exists, skipping creation.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:45:44,224 - modelscope - INFO - Target directory already exists, skipping creation.
WARNING 11-24 21:45:44 config.py:1668] Casting torch.bfloat16 to torch.float16.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:45:53,942 - modelscope - INFO - Target directory already exists, skipping creation.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:45:54,520 - modelscope - INFO - Target directory already exists, skipping creation.
WARNING 11-24 21:45:54 config.py:1668] Casting torch.bfloat16 to torch.float16.
WARNING 11-24 21:45:55 arg_utils.py:1019] [DEPRECATED] Block manager v1 has been removed, and setting --use-v2-block-manager to True or False has no effect on vLLM behavior. Please remove --use-v2-block-manager in your engine argument. If your use case is not supported by SelfAttnBlockSpaceManager (i.e. block manager v2), please file an issue with detailed information.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:45:55,758 - modelscope - INFO - Target directory already exists, skipping creation.
WARNING 11-24 21:46:05 arg_utils.py:1019] [DEPRECATED] Block manager v1 has been removed, and setting --use-v2-block-manager to True or False has no effect on vLLM behavior. Please remove --use-v2-block-manager in your engine argument. If your use case is not supported by SelfAttnBlockSpaceManager (i.e. block manager v2), please file an issue with detailed information.
INFO 11-24 21:46:05 llm_engine.py:237] Initializing an LLM engine (v0.6.3.post1) with config: model='Qwen/Qwen2.5-1.5B-Instruct', speculative_config=None, tokenizer='Qwen/Qwen2.5-1.5B-Instruct', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, rope_scaling=None, rope_theta=None, tokenizer_revision=None, trust_remote_code=False, dtype=torch.float16, max_seq_len=32768, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=1, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=None, enforce_eager=False, kv_cache_dtype=auto, quantization_param_path=None, device_config=cuda, decoding_config=DecodingConfig(guided_decoding_backend='outlines'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=Qwen/Qwen2.5-1.5B-Instruct, num_scheduler_steps=1, chunked_prefill_enabled=False multi_step_stream_outputs=True, enable_prefix_caching=False, use_async_output_proc=True, use_cached_outputs=True, mm_processor_kwargs=None)
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:46:05,632 - modelscope - INFO - Target directory already exists, skipping creation.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:46:17,537 - modelscope - INFO - Target directory already exists, skipping creation.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
^[[B2024-11-24 21:46:18,031 - modelscope - INFO - Target directory already exists, skipping creation.
INFO 11-24 21:46:18 selector.py:224] Cannot use FlashAttention-2 backend for Volta and Turing GPUs.
INFO 11-24 21:46:18 selector.py:115] Using XFormers backend.
/opt/bdp/data01/miniforge3/envs/py38/lib/python3.8/site-packages/xformers/ops/fmha/flash.py:211: FutureWarning: `torch.library.impl_abstract` was renamed to `torch.library.register_fake`. Please use that instead; we will remove `torch.library.impl_abstract` in a future version of PyTorch.
  @torch.library.impl_abstract("xformers_flash::flash_fwd")
/opt/bdp/data01/miniforge3/envs/py38/lib/python3.8/site-packages/xformers/ops/fmha/flash.py:344: FutureWarning: `torch.library.impl_abstract` was renamed to `torch.library.register_fake`. Please use that instead; we will remove `torch.library.impl_abstract` in a future version of PyTorch.
  @torch.library.impl_abstract("xformers_flash::flash_bwd")
INFO 11-24 21:46:19 model_runner.py:1056] Starting to load model Qwen/Qwen2.5-1.5B-Instruct...
INFO 11-24 21:46:19 selector.py:224] Cannot use FlashAttention-2 backend for Volta and Turing GPUs.
INFO 11-24 21:46:19 selector.py:115] Using XFormers backend.
Downloading Model to directory: /home/web/.cache/modelscope/hub/Qwen/Qwen2.5-1.5B-Instruct
2024-11-24 21:46:20,466 - modelscope - INFO - Target directory already exists, skipping creation.
Loading safetensors checkpoint shards:   0% Completed | 0/1 [00:00<?, ?it/s]
Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:04<00:00,  4.37s/it]
Loading safetensors checkpoint shards: 100% Completed | 1/1 [00:04<00:00,  4.37s/it]

INFO 11-24 21:46:25 model_runner.py:1067] Loading model weights took 2.8875 GB

INFO 11-24 21:46:30 gpu_executor.py:122] # GPU blocks: 15322, # CPU blocks: 9362
INFO 11-24 21:46:30 gpu_executor.py:126] Maximum concurrency for 32768 tokens per request: 7.48x
INFO 11-24 21:46:37 model_runner.py:1395] Capturing the model for CUDA graphs. This may lead to unexpected consequences if the model is not static. To run the model in eager mode, set 'enforce_eager=True' or use '--enforce-eager' in the CLI.
INFO 11-24 21:46:37 model_runner.py:1399] CUDA graphs can take additional 1~3 GiB memory per GPU. If you are running out of memory, consider decreasing `gpu_memory_utilization` or enforcing eager mode. You can also reduce the `max_num_seqs` as needed to decrease memory usage.
INFO 11-24 21:46:57 model_runner.py:1523] Graph capturing finished in 20 secs.
INFO 11-24 21:46:58 api_server.py:232] vLLM to use /tmp/tmpey4sm3lz as PROMETHEUS_MULTIPROC_DIR
WARNING 11-24 21:46:58 serving_embedding.py:199] embedding_mode is False. Embedding API will not work.
INFO 11-24 21:46:58 launcher.py:19] Available routes are:
INFO 11-24 21:46:58 launcher.py:27] Route: /openapi.json, Methods: GET, HEAD
INFO 11-24 21:46:58 launcher.py:27] Route: /docs, Methods: GET, HEAD
INFO 11-24 21:46:58 launcher.py:27] Route: /docs/oauth2-redirect, Methods: GET, HEAD
INFO 11-24 21:46:58 launcher.py:27] Route: /redoc, Methods: GET, HEAD
INFO 11-24 21:46:58 launcher.py:27] Route: /health, Methods: GET
INFO 11-24 21:46:58 launcher.py:27] Route: /tokenize, Methods: POST
INFO 11-24 21:46:58 launcher.py:27] Route: /detokenize, Methods: POST
INFO 11-24 21:46:58 launcher.py:27] Route: /v1/models, Methods: GET
INFO 11-24 21:46:58 launcher.py:27] Route: /version, Methods: GET
INFO 11-24 21:46:58 launcher.py:27] Route: /v1/chat/completions, Methods: POST
INFO 11-24 21:46:58 launcher.py:27] Route: /v1/completions, Methods: POST
INFO 11-24 21:46:58 launcher.py:27] Route: /v1/embeddings, Methods: POST
INFO:     Started server process [3725978]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on socket ('0.0.0.0', 9999) (Press CTRL+C to quit)
INFO 11-24 21:47:08 metrics.py:349] Avg prompt throughput: 0.0 tokens/s, Avg generation throughput: 0.0 tokens/s, Running: 0 reqs, Swapped: 0 reqs, Pending: 0 reqs, GPU KV cache usage: 0.0%, CPU KV cache usage: 0.0%.

列出模型

curl http://localhost:9999/v1/models
{"object":"list","data":[{"id":"Qwen/Qwen2.5-1.5B-Instruct","object":"model","created":1732456130,"owned_by":"vllm","root":"Qwen/Qwen2.5-1.5B-Instruct","parent":null,"max_model_len":32768,"permission":[{"id":"modelperm-5cf127a5ed1e4199bf97c030d7a2ffb7","object":"model_permission","created":1732456130,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}

调用

from openai import OpenAI
# Set OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://localhost:9999/v1"

client = OpenAI(
    api_key=openai_api_key,
    base_url=openai_api_base,
)

chat_response = client.chat.completions.create(
    model="Qwen/Qwen2.5-1.5B-Instruct",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "你好,我失业了,给我讲个笑话吧"},
    ]
)
print("Chat response:", chat_response)

输出:

服务端日志

Received request chat-51aec7c3b04b4548a0e33dfe40fc34d7: 
prompt: '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n<|im_start|>user\n你好,我失业了,给我讲个笑话吧<|im_end|>\n<|im_start|>assistant\n', 
params: SamplingParams(n=1, presence_penalty=0.0, frequency_penalty=0.0, repetition_penalty=1.0, temperature=0.7, top_p=1.0, top_k=-1, min_p=0.0, seed=None, stop=[], stop_token_ids=[], include_stop_str_in_output=False, ignore_eos=False, max_tokens=32738, min_tokens=0, logprobs=None, prompt_logprobs=None, skip_special_tokens=True, spaces_between_special_tokens=True, truncate_prompt_tokens=None), guided_decoding=GuidedDecodingParams(json=None, regex=None, choice=None, grammar=None, json_object=None, backend=None, whitespace_pattern=None), prompt_token_ids: [151644, 8948, 198, 2610, 525, 264, 10950, 17847, 13, 151645, 198, 151644, 872, 198, 108386, 3837, 35946, 108127, 34187, 3837, 104169, 99526, 18947, 109959, 100003, 151645, 198, 151644, 77091, 198], lora_request: None, prompt_adapter_request: None.
Chat response: ChatCompletion(id='chat-51aec7c3b04b4548a0e33dfe40fc34d7', 
choices=[Choice(finish_reason='stop', index=0, logprobs=None, message=ChatCompletionMessage(content='你好,很高兴为你讲个笑话。不过,我建议你先找个工作,这样你才能有收入和生活。', refusal=None, role='assistant', audio=None, function_call=None, tool_calls=[]), stop_reason=None)], 
created=1732456399, model='Qwen/Qwen2.5-1.5B-Instruct', object='chat.completion', service_tier=None, system_fingerprint=None, usage=CompletionUsage(completion_tokens=26, prompt_tokens=30, total_tokens=56, completion_tokens_details=None, prompt_tokens_details=None), prompt_logprobs=None)
chat_response.choices[0].message.content
'你好,很高兴为你讲个笑话。不过,我建议你先找个工作,这样你才能有收入和生活。'

5. 参考

https://docs.vllm.ai/en/latest/getting_started/quickstart.html#
https://docs.vllm.ai/en/latest/serving/openai_compatible_server.html

本地部署Qwen2大模型之二:vLLM方式部署 本文继续详细记录通过vLLM方式在本地部署该大模型的过程。 阅读详情

相关推荐

内网部署VLLM+本地大模型,避坑指南

首先要检查你本地的模型文件的绝对路径和启动命令中-v挂在的本地目录文件夹(这个到模型文件夹的上一层,即如果config.json在/vllm/models/bge-reranker-v2-m3中,则这里写/vllm/models)。–served-model-name 模型名: 用来设置对外提供服务时该模型的名称,这个名称就是后面大家发请求的时候model里面的参数。注意:这里需要评估一下自己卡的gpu是不是够,如果一张15G的卡要启动17G的模型是起不来的!vllm当前版本可以支持的模型参考。

weixin_43095301的博客 1873

大模型小白必备《AI大模型基础》,基础打不牢?这本书看就够!

《AI大模型基础》是由专家团队编写的大语言模型专业教材,系统涵盖基础理论、架构设计及应用调优。内容包含Transformer、GPT等主流模型详解,配套丰富案例与代码实现。教材兼具权威性与实战性,适合高校师生、研究人员及AI开发者,帮助掌握大模型核心技术并推动行业应用。随书附赠104G学习资源包,含视频课程、技术文档及面试题库,由资深从业者与学者联合整理,提供从入门到精通的完整学习路径。

2401_85375151的博客 861

vLLM 本地部署Qwen大模型

精度(适配您的 V100 GPU)。:指定服务端口(默认为。

qq_60245590的博客 1372

使用vLLM快速下载使用Huggingface模型

vLLM是一个高效的、可扩展的深度学习库,专门用于处理大规模语言模型(LLMs)。它旨在提供一种灵活且高效的方式来训练和推理大型语言模型,特别是在资源受限的环境中。vLLM如果你在使用 Hugging Face 的库时设置了自定义的缓存目录(通过环境变量),那么模型将会下载到你指定的目录。CopyHugging Face 下载的模型通常存储在用户主目录下的目录中。可以根据需要自定义缓存目录,并在使用vllm时直接加载模型。cpu下没有测试成功。在Kaggle T4环境下测试成功。

skywalk8163的专栏 6475

基于vLLM本地部署企业级DeepSeek大模型

本文介绍了基于vLLM本地部署企业级DeepSeek大模型的方法。vLLM是一款专为大型语言模型设计的高效推理工具库,具有高性能推理能力、灵活兼容性和便捷开发体验。其技术架构包括调度器、模型执行器、内存管理器等核心组件,支持多种并行计算策略和先进的内存管理机制。文章详细说明了vLLM的安装步骤,包括系统要求、虚拟环境创建、CUDA配置等,并提供了验证安装成功的方法。通过vLLM部署DeepSeek模型,企业可以获得强大的AI能力,提升数字化转型中的竞争力。

weixin_52610848的博客 1402

基于AutoDL云服务器的VLLM大模型部署以及本地调用

本文介绍了使用vLLM框架在云服务器上部署大语言模型的完整流程。

hdsbdjsjsbs的博客 1028

使用 vLLM 部署本地 LLM 指南

我们输入以下命令启动服务器,–model 为本地模型的路径,–served-model-name 是模型在服务器中的别名,这里我们取简称 openchat,其他都是默认值,当然也可以自己设置。在这里我们不演示了,直接将 vLLM 部署为模仿 OpenAI API 协议的服务器,这使得 vLLM 可以用作使用 OpenAI API 的应用程序的直接替代品。当然,你也可以试一试 ChatCompletions 格式的请求,ChatCompletions API 的请求内容如下,两种的格式还是有一些区别的。

spicy_chicken123的博客 4万+

vllm0.4.2源码

vllm0.4.2源码

vLLM部署本地大模型进行在线调用

vLLM部署本地大模型进行在线调用

人工智能(AI)技术,大模型技术,深度学习,机器学习,计算机视觉,AI工具实践应用等分享 6196

vLLM_ 一个易于使用、快速且低成本的LLM(大语言模型)服务引擎。.zip

一个专为大语言模型设计的高性能推理和服务引擎。它通过创新的PagedAttention注意力算法,显著提升了GPU内存利用率与推理吞吐量。该项目旨在让开发者能够轻松、快速且低成本地部署LLM服务。其核心价值在于为生产环境提供了高效稳定的模型服务解决方案。 【核心功能】 - 采用PagedAttention技术,优化KV缓存管理,大幅减少内存浪费 - 支持连续批处理处理,提升GPU利用率与整体吞吐量 - 兼容Hugging Face模型,提供开箱即用的模型部署体验 - 具备分布式推理能力,支持多GPU并行计算 【适用场景/人群】 该项目特别适合需要部署大语言模型到生产环境的AI工程师和团队。适用于模型服务平台构建、高并发API服务部署,以及任何对推理效率和成本敏感的商业应用场景。 【快速上手】 1. 使用pip安装:`pip install vllm` 2. 通过几行代码即可启动推理服务 3. 支持直接加载Hugging Face模型进行推理

vllm-0.8.5+cu118-cp38-abi3-manylinux1-x86-64.whl包下载

vllm-0.8.5+cu118-cp38-abi3-manylinux1_x86_64.whl包下载

通过vllm快速部署本地大模型

摘要:本文详细介绍了使用vLLM框架在本地部署大模型的完整流程。文章首先对比了vLLM和Ollama两种部署方案,分析其适用场景和技术差异。随后分步骤讲解了环境准备、模型下载、原生部署和Docker部署的具体方法,特别针对Windows/Linux/Mac不同系统提供了详细配置指南。文中重点说明了量化部署、GPU资源优化等关键技术点,并整理了8类常见问题的解决方案,包括显存不足、模型加载失败等实际问题。最后给出了不同硬件条件下的性能优化建议,帮助开发者根据实际需求选择合适的部署方案。

若不知道要驶向哪个码头,那么任何风都不会是顺风。 2477

vllm 0.23 6666

vllm 0.23 6666

【大模型本地部署】vLLM+WSL2本地部署大模型

在AI时代迅猛发展的今天,你是否梦想过在自己的电脑上运行一个强大的大语言模型(LLM),无需依赖云服务,就能随时生成文本、代码或创意内容甚至微调模型?通过vLLM这个高效的推理引擎,结合WSL2(Windows Subsystem for Linux 2)的强大兼容性,就能在Windows环境下轻松实现本地部署大模型。无论你是开发者、研究者还是AI爱好者,这篇文章将带你从零起步,掌握这项实用技能,开启你的本地AI之旅。

WANGJUNAIJIAO的博客 480

【笔记软件obsidian】从入门到精通

目录 一、前言 二、下载及安装 三、【选修】ios用户如何通过iCloud进行三平台同步 四、基本Markdown语法 五、【选修】插件的下载及安装方式 六、

patrick的博客 9万+

基于Simulink的永磁同步电机容错控制(缺相容错)

本文基于Simulink平台,详细介绍了永磁同步电机(PMSM)缺相容错控制的仿真实现方法。针对逆变器开路故障导致的缺相问题,提出"检测-重构-补偿"三阶段控制策略:采用电流阈值法快速检测故障(<5ms),重构αβ坐标系实现两相矢量控制,并通过谐波电流注入抑制转矩脉动(<8%)。仿真结果表明,该方法能有效维持故障后电机运行,转速波动<3%,满足电动汽车等关键应用的可靠性需求。文章包含完整的Simulink建模步骤、MATLAB函数代码及参数设置,为工程实践提供了可复现的

xiaoheshang_123的博客 141

Linux环境下使用vLLM部署本地大模型

通过以上步骤,您可以在Linux环境下成功部署vLLM并运行大模型服务。在实际操作中,可能需要根据具体的vLLM版本和模型文件进行调整和优化。后续的步骤3和步骤4将依赖于该服务进行测试,因此请务必不要关闭此终端窗口。下载成功后,模型文件会保存在./model/qwen2_5-1_5b-instruct文件夹下。本课程实验环境需与微调章节保持一致,确保在GPU环境下执行模型部署操作。如果你希望在后台持续运行服务而不受终端窗口关闭的影响,可以使用这条命令。下载开源模型进行部署,暂不在此演示。

剑飞的架构思维 8314

Qt C++ 串口调试助手

1. **串口配置**:支持自动检测可用串口,可配置波特率(9600~921600)、数据位(5~8)、校验位(无/奇/偶/标记/空格)、停止位(1/1.5/2)。- HEX 模式发送时,输入格式需为十六进制字符(0-9、A-F),可带空格(如 `01 A3 FF`)或不带空格(如 `01A3FF`)。// 发送模式:true=HEX,false=ASCII。// 字符串转HEX字节数组。ui->parity->addItems({"无", "奇校验", "偶校验", "标记校验", "空格校验"});

寒寒豆豆软件公司的博客 140

基于vLLM+DeepSeek本地部署大模型,全网最详细的方案!

目前AI大模型的技术岗位与能力培养随着人工智能技术的迅速发展和应用 , 大模型作为其中的重要组成部分 , 正逐渐成为推动人工智能发展的重要引擎 。大模型以其强大的数据处理和模式识别能力, 广泛应用于自然语言处理 、计算机视觉 、 智能推荐等领域 ,为各行各业带来了革命性的改变和机遇 。

2401_85373691的博客 1769

零基础DSP实战TMS320F28035:第九节,ADC比较器&EPWM

ADC比较器框图如下所示:-电压-----------------------------输出-电压A>电压B------------------ 1-电压A

sinat_30943509的博客 2520

linux系统中实现智能家居的基本方法

使用QT开发智能家居中的一个物联应用,通过云服务器远程控制设备与设备进行通信。在生活中,可以使用WIFI智能插座控制电器开关,比如远程开启热水器,远程打开空调,窗帘等等。包括:WIFI联网,注册到云服务器上,编写QT UI通过网络来与云服务器通信,然后再下发指令到这个连网的设备。硬件说明:需要有一个串口转WIFI模块,另外需要加上一个USB-TTL模块,外加一根T口USB连接线,可接入PC电脑调试。

嵌入式技术开发 2606

小白能看懂的AI大模型系列-本地部署(vllm)

文章详细介绍了如何在本地部署AI大模型,以VLLM为例,从设备选择、环境配置到模型运行的全过程。推荐使用AutoDL云服务器解决硬件需求,通过VS Code远程连接开发,创建虚拟环境并配置vllm框架,最后从魔搭社区下载模型并成功运行。教程步骤清晰,适合零基础小白入门,帮助读者掌握大模型本地化部署技能,解决数据泄露等隐私问题。目前开源大模型的一大优势就是,它可以本地化部署,只要你的显卡硬件配置能满足要求,你可以在自己的本地部署属于自己的大模型,不用担心数据泄露等问题。

2401_85375298的博客 926

[明道云] -基础教学1- 创建第一个工作表:从 0 到实用

明道云工作表相当于数据库表,是存储业务数据的核心组件。创建工作表主要有两种方式:1)从空白新建,通过添加字段(最多200个)、设置属性、配置表单样式;2)从Excel导入,需选择sheet、配置字段映射。创建后系统自动生成默认视图,支持多种视图形式(看板/日历等)。建议设置合适的标题字段和关联关系,初学者可在一小时内完成基础应用搭建。后续可扩展权限控制、工作流自动化等功能。

每日出拳老爷子的博客 554

大模型本地部署,小号的vLLM来了

一文中提到 2025 年最热门的项目分布在 AI 基础设施(vllm、ollama、huggingface/transformers)和持久的生态系统(vscode、godot、home-assistant)之间。唯一让我不满的是我在内网用 docker 起 vLLM,它太大了,足足 22 个 GB。这个推理引擎也是我最喜爱的,本号测试部署的 N 多大模型都是用它来部署的。时间关系,我还没有本地跑大参数模型,后续肯定要试一试的。这种小模型,时延更小,吞吐量更大,看起来是很不错的样子。

785

咨询进阶——解读40页公司战略解码方法【附全文阅读】

战略解码是将企业战略转化为可执行计划的关键过程,强调垂直和水平一致性原则。通过KPI指标设计和目标分解,确保战略在各部门和岗位有效落地。解码过程包括战略澄清、目标牵引、绩效分解和承诺签订,输出战略解码图等文件。不同部门根据责任定位(如利润中心、绩效中心)采用差异化考核方式,实现战略有效执行。

cdfunlove的博客 141

探索激光焊接光束质量诊断系统:原理、应用与前沿

激光焊接光束质量诊断系统是一套专门用于精确评估和监测激光焊接过程中光束特性的精密设备。它宛如一个精密的 “光束医生”,能够全方位地对激光光束进行 “体检”,为焊接工艺提供关键的数据支持。探测器:作为系统的 “感知触角”,探测器负责捕捉激光光束的各种信息,其性能直接影响着诊断的准确性。例如,常见的 CCD(电荷耦合器件)探测器和 CMOS(互补金属氧化物半导体)探测器,它们能够将光信号转化为电信号,具有高灵敏度、高分辨率等特点,可精确探测光束的强度分布、光斑位置等参数。光学透镜。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2579
上一篇: Apache Airflow 数据管道编排快速入门
下一篇: 使用 Ray 进行大规模分布式数据处理
Michael阿明
Michael阿明 优质创作者: 算法与数据结构技术领域 优质创作者: 算法与数据结构技术领域
博客等级 码龄12年 8875粉丝 2601原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael阿明

如果可以,请点赞留言支持我哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值