mirror of
				https://github.com/ggml-org/llama.cpp.git
				synced 2025-11-04 09:32:00 +00:00 
			
		
		
		
	Merge branch 'master' into compilade/refactor-kv-cache
This commit is contained in:
		@@ -1,17 +1,17 @@
 | 
			
		||||
#include "arg.h"
 | 
			
		||||
#include "common.h"
 | 
			
		||||
#include "llama.h"
 | 
			
		||||
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <cstdio>
 | 
			
		||||
#include <chrono>
 | 
			
		||||
 | 
			
		||||
int main(int argc, char ** argv) {
 | 
			
		||||
    gpt_params params;
 | 
			
		||||
 | 
			
		||||
    params.prompt = "The quick brown fox";
 | 
			
		||||
    params.sparams.seed = 1234;
 | 
			
		||||
 | 
			
		||||
    if (!gpt_params_parse(argc, argv, params)) {
 | 
			
		||||
        gpt_params_print_usage(argc, argv, params);
 | 
			
		||||
    if (!gpt_params_parse(argc, argv, params, LLAMA_EXAMPLE_COMMON)) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -38,6 +38,13 @@ int main(int argc, char ** argv) {
 | 
			
		||||
        return 1;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto sparams = llama_sampler_chain_default_params();
 | 
			
		||||
 | 
			
		||||
    llama_sampler * smpl = llama_sampler_chain_init(sparams);
 | 
			
		||||
 | 
			
		||||
    llama_sampler_chain_add(smpl, llama_sampler_init_softmax());
 | 
			
		||||
    llama_sampler_chain_add(smpl, llama_sampler_init_dist(params.sparams.seed));
 | 
			
		||||
 | 
			
		||||
    // tokenize prompt
 | 
			
		||||
    auto tokens = llama_tokenize(ctx, params.prompt, true);
 | 
			
		||||
 | 
			
		||||
@@ -64,16 +71,7 @@ int main(int argc, char ** argv) {
 | 
			
		||||
    printf("\nfirst run: %s", params.prompt.c_str());
 | 
			
		||||
 | 
			
		||||
    for (auto i = 0; i < params.n_predict; i++) {
 | 
			
		||||
        auto * logits = llama_get_logits(ctx);
 | 
			
		||||
        auto n_vocab = llama_n_vocab(model);
 | 
			
		||||
 | 
			
		||||
        std::vector<llama_token_data> candidates;
 | 
			
		||||
        candidates.reserve(n_vocab);
 | 
			
		||||
        for (llama_token token_id = 0; token_id < n_vocab; token_id++) {
 | 
			
		||||
            candidates.emplace_back(llama_token_data{token_id, logits[token_id], 0.0f});
 | 
			
		||||
        }
 | 
			
		||||
        llama_token_data_array candidates_p = { candidates.data(), candidates.size(), false };
 | 
			
		||||
        auto next_token = llama_sample_token(ctx, &candidates_p);
 | 
			
		||||
        auto next_token     = llama_sampler_sample(smpl, ctx, -1);
 | 
			
		||||
        auto next_token_str = llama_token_to_piece(ctx, next_token);
 | 
			
		||||
 | 
			
		||||
        printf("%s", next_token_str.c_str());
 | 
			
		||||
@@ -96,6 +94,11 @@ int main(int argc, char ** argv) {
 | 
			
		||||
    // make new context
 | 
			
		||||
    auto * ctx2 = llama_new_context_with_model(model, llama_context_params_from_gpt_params(params));
 | 
			
		||||
 | 
			
		||||
    llama_sampler * smpl2 = llama_sampler_chain_init(sparams);
 | 
			
		||||
 | 
			
		||||
    llama_sampler_chain_add(smpl2, llama_sampler_init_softmax());
 | 
			
		||||
    llama_sampler_chain_add(smpl2, llama_sampler_init_dist(params.sparams.seed));
 | 
			
		||||
 | 
			
		||||
    printf("\nsecond run: %s", params.prompt.c_str());
 | 
			
		||||
 | 
			
		||||
    // load state (rng, logits, embedding and kv_cache) from file
 | 
			
		||||
@@ -124,15 +127,7 @@ int main(int argc, char ** argv) {
 | 
			
		||||
 | 
			
		||||
    // second run
 | 
			
		||||
    for (auto i = 0; i < params.n_predict; i++) {
 | 
			
		||||
        auto * logits = llama_get_logits(ctx2);
 | 
			
		||||
        auto n_vocab = llama_n_vocab(model);
 | 
			
		||||
        std::vector<llama_token_data> candidates;
 | 
			
		||||
        candidates.reserve(n_vocab);
 | 
			
		||||
        for (llama_token token_id = 0; token_id < n_vocab; token_id++) {
 | 
			
		||||
            candidates.emplace_back(llama_token_data{token_id, logits[token_id], 0.0f});
 | 
			
		||||
        }
 | 
			
		||||
        llama_token_data_array candidates_p = { candidates.data(), candidates.size(), false };
 | 
			
		||||
        auto next_token = llama_sample_token(ctx2, &candidates_p);
 | 
			
		||||
        auto next_token     = llama_sampler_sample(smpl2, ctx2, -1);
 | 
			
		||||
        auto next_token_str = llama_token_to_piece(ctx2, next_token);
 | 
			
		||||
 | 
			
		||||
        printf("%s", next_token_str.c_str());
 | 
			
		||||
@@ -157,7 +152,12 @@ int main(int argc, char ** argv) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // make new context
 | 
			
		||||
    auto* ctx3 = llama_new_context_with_model(model, llama_context_params_from_gpt_params(params));
 | 
			
		||||
    auto * ctx3 = llama_new_context_with_model(model, llama_context_params_from_gpt_params(params));
 | 
			
		||||
 | 
			
		||||
    llama_sampler * smpl3 = llama_sampler_chain_init(sparams);
 | 
			
		||||
 | 
			
		||||
    llama_sampler_chain_add(smpl3, llama_sampler_init_softmax());
 | 
			
		||||
    llama_sampler_chain_add(smpl3, llama_sampler_init_dist(params.sparams.seed));
 | 
			
		||||
 | 
			
		||||
    printf("\nsingle seq run: %s", params.prompt.c_str());
 | 
			
		||||
 | 
			
		||||
@@ -215,15 +215,7 @@ int main(int argc, char ** argv) {
 | 
			
		||||
 | 
			
		||||
    // third run with seq 1 instead of 0
 | 
			
		||||
    for (auto i = 0; i < params.n_predict; i++) {
 | 
			
		||||
        auto * logits = llama_get_logits(ctx3);
 | 
			
		||||
        auto n_vocab = llama_n_vocab(model);
 | 
			
		||||
        std::vector<llama_token_data> candidates;
 | 
			
		||||
        candidates.reserve(n_vocab);
 | 
			
		||||
        for (llama_token token_id = 0; token_id < n_vocab; token_id++) {
 | 
			
		||||
            candidates.emplace_back(llama_token_data{token_id, logits[token_id], 0.0f});
 | 
			
		||||
        }
 | 
			
		||||
        llama_token_data_array candidates_p = { candidates.data(), candidates.size(), false };
 | 
			
		||||
        auto next_token = llama_sample_token(ctx3, &candidates_p);
 | 
			
		||||
        auto next_token     = llama_sampler_sample(smpl3, ctx3, -1);
 | 
			
		||||
        auto next_token_str = llama_token_to_piece(ctx3, next_token);
 | 
			
		||||
 | 
			
		||||
        printf("%s", next_token_str.c_str());
 | 
			
		||||
@@ -240,6 +232,10 @@ int main(int argc, char ** argv) {
 | 
			
		||||
 | 
			
		||||
    printf("\n");
 | 
			
		||||
 | 
			
		||||
    llama_sampler_free(smpl);
 | 
			
		||||
    llama_sampler_free(smpl2);
 | 
			
		||||
    llama_sampler_free(smpl3);
 | 
			
		||||
 | 
			
		||||
    llama_free(ctx3);
 | 
			
		||||
    llama_free_model(model);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user