(
path_server: str, path_log: Optional[str], path_db: Optional[str], name: Optional[str], prompt_source: str, n_prompts: int,
n_predict: int, n_predict_min: int, seed_offset: int)
| 145 | |
| 146 | |
| 147 | def benchmark( |
| 148 | path_server: str, path_log: Optional[str], path_db: Optional[str], name: Optional[str], prompt_source: str, n_prompts: int, |
| 149 | n_predict: int, n_predict_min: int, seed_offset: int): |
| 150 | external_server: bool = path_server.startswith("http://") or path_server.startswith("https://") |
| 151 | if os.environ.get("LLAMA_ARG_N_PARALLEL") is None: |
| 152 | logger.info("LLAMA_ARG_N_PARALLEL not explicitly set, using 32") |
| 153 | os.environ["LLAMA_ARG_N_PARALLEL"] = "32" |
| 154 | |
| 155 | parallel: int = int(os.environ.get("LLAMA_ARG_N_PARALLEL")) # type: ignore |
| 156 | prompts: Union[None, list[str], list[list[int]]] = get_prompts_text(prompt_source, n_prompts) |
| 157 | synthetic_prompts: bool = prompts is None |
| 158 | prompt_n = [] |
| 159 | |
| 160 | if synthetic_prompts: |
| 161 | prompt_source_split: list[str] = prompt_source.split("-") |
| 162 | assert len(prompt_source_split) == 3 |
| 163 | assert prompt_source_split[0].lower() == "rng" |
| 164 | prompt_length_min: int = int(prompt_source_split[1]) |
| 165 | prompt_length_max: int = int(prompt_source_split[2]) |
| 166 | logger.info("Generating random prompts...") |
| 167 | prompt_n = get_prompt_lengths_rng(n_prompts, prompt_length_min, prompt_length_max, seed_offset) |
| 168 | prompts = get_prompts_rng(prompt_n) |
| 169 | else: |
| 170 | n_predict_min = n_predict |
| 171 | |
| 172 | if not external_server and os.environ.get("LLAMA_ARG_CTX_SIZE") is None: |
| 173 | context_per_slot: int = int(1.05 * (n_predict + (np.max(prompt_n) if synthetic_prompts else 2048))) |
| 174 | context_total: int = context_per_slot * parallel |
| 175 | os.environ["LLAMA_ARG_CTX_SIZE"] = str(context_total) |
| 176 | logger.info(f"LLAMA_ARG_CTX_SIZE not explicitly set, using {context_total} ({context_per_slot} per slot).") |
| 177 | |
| 178 | server: Optional[dict] = None |
| 179 | session = None |
| 180 | try: |
| 181 | server = get_server(path_server, path_log) |
| 182 | server_address: str = server["address"] |
| 183 | assert external_server == (server["process"] is None) |
| 184 | |
| 185 | adapter = requests.adapters.HTTPAdapter(pool_connections=parallel, pool_maxsize=parallel) # type: ignore |
| 186 | session = requests.Session() |
| 187 | session.mount("http://", adapter) |
| 188 | session.mount("https://", adapter) |
| 189 | |
| 190 | data: list[dict] = [] |
| 191 | |
| 192 | for i, p in enumerate(prompts): |
| 193 | if seed_offset >= 0: |
| 194 | random.seed(3 * (seed_offset + 1000 * i) + 1) |
| 195 | data.append({ |
| 196 | "session": session, "server_address": server_address, "external_server": external_server, "prompt": p, |
| 197 | "synthetic_prompt": synthetic_prompts, "n_predict": random.randint(n_predict_min, n_predict), |
| 198 | "seed": (3 * (seed_offset + 1000 * i) + 2) if seed_offset >= 0 else -1}) |
| 199 | |
| 200 | if not synthetic_prompts: |
| 201 | logger.info("Getting the prompt lengths...") |
| 202 | prompt_n = [get_prompt_length(d) for d in data] |
| 203 | |
| 204 | logger.info("Starting the benchmark...\n") |
no test coverage detected