mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-10-31 08:51:55 +00:00 
			
		
		
		
	apply various in places
This commit is contained in:
		| @@ -102,7 +102,7 @@ int main(int argc, char ** argv) { | ||||
|  | ||||
|     // create a llama_batch | ||||
|     // we use this object to submit token data for decoding | ||||
|     llama_batch batch = llama_batch_init(std::max(tokens_list.size(), (size_t) n_parallel), 0, n_parallel); | ||||
|     llama_batch_ext * batch = llama_batch_ext_init(std::max(tokens_list.size(), (size_t) n_parallel), n_parallel); | ||||
|  | ||||
|     std::vector<llama_seq_id> seq_ids(n_parallel, 0); | ||||
|     for (int32_t i = 0; i < n_parallel; ++i) { | ||||
| @@ -111,12 +111,12 @@ int main(int argc, char ** argv) { | ||||
|  | ||||
|     // evaluate the initial prompt | ||||
|     for (size_t i = 0; i < tokens_list.size(); ++i) { | ||||
|         common_batch_add(batch, tokens_list[i], i, seq_ids, false); | ||||
|         llama_batch_ext_add_text(batch, tokens_list[i], i, seq_ids.data(), seq_ids.size(), false); | ||||
|     } | ||||
|     GGML_ASSERT(batch.n_tokens == (int) tokens_list.size()); | ||||
|     GGML_ASSERT(llama_batch_ext_get_n_tokens(batch) == (int) tokens_list.size()); | ||||
|  | ||||
|     if (llama_model_has_encoder(model)) { | ||||
|         if (llama_encode(ctx, batch)) { | ||||
|         if (llama_encode_ext(ctx, batch)) { | ||||
|             LOG_ERR("%s : failed to eval\n", __func__); | ||||
|             return 1; | ||||
|         } | ||||
| @@ -126,14 +126,14 @@ int main(int argc, char ** argv) { | ||||
|             decoder_start_token_id = llama_vocab_bos(vocab); | ||||
|         } | ||||
|  | ||||
|         common_batch_clear(batch); | ||||
|         common_batch_add(batch, decoder_start_token_id, 0, seq_ids, false); | ||||
|         llama_batch_ext_clear(batch); | ||||
|         llama_batch_ext_add_text(batch, decoder_start_token_id, 0, seq_ids.data(), seq_ids.size(), false); | ||||
|     } | ||||
|  | ||||
|     // llama_decode will output logits only for the last token of the prompt | ||||
|     batch.logits[batch.n_tokens - 1] = true; | ||||
|     llama_batch_ext_set_logits_last(batch); | ||||
|  | ||||
|     if (llama_decode(ctx, batch) != 0) { | ||||
|     if (llama_decode_ext(ctx, batch) != 0) { | ||||
|         LOG_ERR("%s: llama_decode() failed\n", __func__); | ||||
|         return 1; | ||||
|     } | ||||
| @@ -155,16 +155,16 @@ int main(int argc, char ** argv) { | ||||
|  | ||||
|     // remember the batch index of the last token for each parallel sequence | ||||
|     // we need this to determine which logits to sample from | ||||
|     std::vector<int32_t> i_batch(n_parallel, batch.n_tokens - 1); | ||||
|     std::vector<int32_t> i_batch(n_parallel, llama_batch_ext_get_n_tokens(batch) - 1); | ||||
|  | ||||
|     int n_cur    = batch.n_tokens; | ||||
|     int n_cur    = llama_batch_ext_get_n_tokens(batch); | ||||
|     int n_decode = 0; | ||||
|  | ||||
|     const auto t_main_start = ggml_time_us(); | ||||
|  | ||||
|     while (n_cur <= n_predict) { | ||||
|         // prepare the next batch | ||||
|         common_batch_clear(batch); | ||||
|         llama_batch_ext_clear(batch); | ||||
|  | ||||
|         // sample the next token for each parallel sequence / stream | ||||
|         for (int32_t i = 0; i < n_parallel; ++i) { | ||||
| @@ -193,23 +193,23 @@ int main(int argc, char ** argv) { | ||||
|  | ||||
|             streams[i] += common_token_to_piece(ctx, new_token_id); | ||||
|  | ||||
|             i_batch[i] = batch.n_tokens; | ||||
|             i_batch[i] = llama_batch_ext_get_n_tokens(batch); | ||||
|  | ||||
|             // push this new token for next evaluation | ||||
|             common_batch_add(batch, new_token_id, n_cur, { i }, true); | ||||
|             llama_batch_ext_add_text(batch, new_token_id, n_cur, &i, 1, false); | ||||
|  | ||||
|             n_decode += 1; | ||||
|         } | ||||
|  | ||||
|         // all streams are finished | ||||
|         if (batch.n_tokens == 0) { | ||||
|         if (llama_batch_ext_get_n_tokens(batch) == 0) { | ||||
|             break; | ||||
|         } | ||||
|  | ||||
|         n_cur += 1; | ||||
|  | ||||
|         // evaluate the current batch with the transformer model | ||||
|         if (llama_decode(ctx, batch)) { | ||||
|         if (llama_decode_ext(ctx, batch)) { | ||||
|             LOG_ERR("%s : failed to eval, return code %d\n", __func__, 1); | ||||
|             return 1; | ||||
|         } | ||||
| @@ -234,7 +234,7 @@ int main(int argc, char ** argv) { | ||||
|  | ||||
|     fprintf(stderr, "\n"); | ||||
|  | ||||
|     llama_batch_free(batch); | ||||
|     llama_batch_ext_free(batch); | ||||
|  | ||||
|     llama_sampler_free(smpl); | ||||
|     llama_free(ctx); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Xuan Son Nguyen
					Xuan Son Nguyen