| |
| |
|
|
| |
| import os |
| import random |
|
|
| import torch.distributed as dist |
|
|
| from vllm import LLM, SamplingParams |
| from vllm.distributed.parallel_state import get_world_group |
|
|
| |
| dist.init_process_group() |
|
|
| |
| prompts = [ |
| "Hello, my name is", |
| "The president of the United States is", |
| "The capital of France is", |
| "The future of AI is", |
| ] |
|
|
| sampling_params = SamplingParams(temperature=0.8, top_p=0.95) |
|
|
| |
| |
| llm = LLM( |
| model="facebook/opt-125m", |
| tensor_parallel_size=2, |
| pipeline_parallel_size=int(os.getenv("PP_SIZE", 1)), |
| distributed_executor_backend="external_launcher", |
| gpu_memory_utilization=random.uniform(0.8, 0.92), |
| seed=0, |
| ) |
|
|
| outputs = llm.generate(prompts, sampling_params) |
|
|
| cpu_group = get_world_group().cpu_group |
|
|
| torch_rank = dist.get_rank(group=cpu_group) |
|
|
|
|
| def test_consistent_across_ranks(obj): |
| if torch_rank == 0: |
| dist.broadcast_object_list([obj], src=0, group=cpu_group) |
| else: |
| container = [None] |
| dist.broadcast_object_list(container, src=0, group=cpu_group) |
| assert container[0] == obj |
|
|
|
|
| test_consistent_across_ranks(llm.llm_engine.vllm_config.cache_config.num_cpu_blocks) |
| test_consistent_across_ranks(llm.llm_engine.vllm_config.cache_config.num_gpu_blocks) |
|
|
| |
| |
| params = list( |
| llm.llm_engine.model_executor.driver_worker.worker.model_runner.model.parameters() |
| ) |
| test_consistent_across_ranks(len(params)) |
|
|
| |
| for output in outputs: |
| prompt = output.prompt |
| generated_text = output.outputs[0].text |
| test_consistent_across_ranks(prompt) |
| test_consistent_across_ranks(generated_text) |
| print(f"Rank {torch_rank}, Prompt: {prompt!r}, Generated text: {generated_text!r}") |
|
|