llama : replace all API facing int's with int32_t (#4577)

* replaced all API facing `int`'s with `int32_t`

* formatting and missed `int` in `llama_token_to_piece`
This commit is contained in:
Marcus Dunn 2024-01-02 06:15:16 -08:00 committed by GitHub
parent 83e633c27e
commit 0040d42eeb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 57 deletions

View File

@ -8030,7 +8030,7 @@ void llama_sample_softmax(struct llama_context * ctx, llama_token_data_array * c
} }
} }
void llama_sample_top_k(struct llama_context * ctx, llama_token_data_array * candidates, int k, size_t min_keep) { void llama_sample_top_k(struct llama_context * ctx, llama_token_data_array * candidates, int32_t k, size_t min_keep) {
const int64_t t_start_sample_us = ggml_time_us(); const int64_t t_start_sample_us = ggml_time_us();
k = std::max(k, (int) min_keep); k = std::max(k, (int) min_keep);
@ -8390,7 +8390,7 @@ void llama_sample_classifier_free_guidance(
} }
} }
llama_token llama_sample_token_mirostat(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, int m, float * mu) { llama_token llama_sample_token_mirostat(struct llama_context * ctx, llama_token_data_array * candidates, float tau, float eta, int32_t m, float * mu) {
GGML_ASSERT(ctx); GGML_ASSERT(ctx);
auto N = float(llama_n_vocab(llama_get_model(ctx))); auto N = float(llama_n_vocab(llama_get_model(ctx)));
@ -9598,7 +9598,7 @@ struct llama_model_quantize_params llama_model_quantize_default_params() {
return result; return result;
} }
int llama_max_devices(void) { int32_t llama_max_devices(void) {
return LLAMA_MAX_DEVICES; return LLAMA_MAX_DEVICES;
} }
@ -9909,15 +9909,15 @@ enum llama_vocab_type llama_vocab_type(const struct llama_model * model) {
return model->vocab.type; return model->vocab.type;
} }
int llama_n_vocab(const struct llama_model * model) { int32_t llama_n_vocab(const struct llama_model * model) {
return model->vocab.id_to_token.size(); return model->vocab.id_to_token.size();
} }
int llama_n_ctx_train(const struct llama_model * model) { int32_t llama_n_ctx_train(const struct llama_model * model) {
return model->hparams.n_ctx_train; return model->hparams.n_ctx_train;
} }
int llama_n_embd(const struct llama_model * model) { int32_t llama_n_embd(const struct llama_model * model) {
return model->hparams.n_embd; return model->hparams.n_embd;
} }
@ -9925,7 +9925,7 @@ float llama_rope_freq_scale_train(const struct llama_model * model) {
return model->hparams.rope_freq_scale_train; return model->hparams.rope_freq_scale_train;
} }
int llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size) { int32_t llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size) {
const auto & it = model->gguf_kv.find(key); const auto & it = model->gguf_kv.find(key);
if (it == model->gguf_kv.end()) { if (it == model->gguf_kv.end()) {
if (buf_size > 0) { if (buf_size > 0) {
@ -9936,11 +9936,11 @@ int llama_model_meta_val_str(const struct llama_model * model, const char * key,
return snprintf(buf, buf_size, "%s", it->second.c_str()); return snprintf(buf, buf_size, "%s", it->second.c_str());
} }
int llama_model_meta_count(const struct llama_model * model) { int32_t llama_model_meta_count(const struct llama_model * model) {
return (int)model->gguf_kv.size(); return (int)model->gguf_kv.size();
} }
int llama_model_meta_key_by_index(const struct llama_model * model, int i, char * buf, size_t buf_size) { int32_t llama_model_meta_key_by_index(const struct llama_model * model, int i, char * buf, size_t buf_size) {
if (i < 0 || i >= (int)model->gguf_kv.size()) { if (i < 0 || i >= (int)model->gguf_kv.size()) {
if (buf_size > 0) { if (buf_size > 0) {
buf[0] = '\0'; buf[0] = '\0';
@ -9952,7 +9952,7 @@ int llama_model_meta_key_by_index(const struct llama_model * model, int i, char
return snprintf(buf, buf_size, "%s", it->first.c_str()); return snprintf(buf, buf_size, "%s", it->first.c_str());
} }
int llama_model_meta_val_str_by_index(const struct llama_model * model, int i, char * buf, size_t buf_size) { int32_t llama_model_meta_val_str_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size) {
if (i < 0 || i >= (int)model->gguf_kv.size()) { if (i < 0 || i >= (int)model->gguf_kv.size()) {
if (buf_size > 0) { if (buf_size > 0) {
buf[0] = '\0'; buf[0] = '\0';
@ -9964,7 +9964,7 @@ int llama_model_meta_val_str_by_index(const struct llama_model * model, int i, c
return snprintf(buf, buf_size, "%s", it->second.c_str()); return snprintf(buf, buf_size, "%s", it->second.c_str());
} }
int llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size) { int32_t llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size) {
return snprintf(buf, buf_size, "%s %s %s", return snprintf(buf, buf_size, "%s %s %s",
llama_model_arch_name(model->arch).c_str(), llama_model_arch_name(model->arch).c_str(),
llama_model_type_name(model->type), llama_model_type_name(model->type),
@ -9991,7 +9991,7 @@ struct ggml_tensor * llama_get_model_tensor(struct llama_model * model, const ch
return ggml_get_tensor(model->ctx, name); return ggml_get_tensor(model->ctx, name);
} }
int llama_model_quantize( uint32_t llama_model_quantize(
const char * fname_inp, const char * fname_inp,
const char * fname_out, const char * fname_out,
const llama_model_quantize_params * params) { const llama_model_quantize_params * params) {
@ -10004,7 +10004,7 @@ int llama_model_quantize(
} }
} }
int llama_apply_lora_from_file(struct llama_context * ctx, const char * path_lora, float scale, const char * path_base_model, int n_threads) { int32_t llama_apply_lora_from_file(struct llama_context * ctx, const char * path_lora, float scale, const char * path_base_model, int32_t n_threads) {
try { try {
return llama_apply_lora_from_file_internal(ctx->model, path_lora, scale, path_base_model, n_threads); return llama_apply_lora_from_file_internal(ctx->model, path_lora, scale, path_base_model, n_threads);
} catch (const std::exception & err) { } catch (const std::exception & err) {
@ -10013,7 +10013,7 @@ int llama_apply_lora_from_file(struct llama_context * ctx, const char * path_lor
} }
} }
int llama_model_apply_lora_from_file(const struct llama_model * model, const char * path_lora, float scale, const char * path_base_model, int n_threads) { int32_t llama_model_apply_lora_from_file(const struct llama_model * model, const char * path_lora, float scale, const char * path_base_model, int32_t n_threads) {
try { try {
return llama_apply_lora_from_file_internal(*model, path_lora, scale, path_base_model, n_threads); return llama_apply_lora_from_file_internal(*model, path_lora, scale, path_base_model, n_threads);
} catch (const std::exception & err) { } catch (const std::exception & err) {
@ -10111,7 +10111,7 @@ void llama_kv_cache_view_update(const struct llama_context * ctx, struct llama_k
} }
} }
int llama_get_kv_cache_token_count(const struct llama_context * ctx) { int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx) {
int result = 0; int result = 0;
for (uint32_t i = 0; i < ctx->kv_self.size; i++) { for (uint32_t i = 0; i < ctx->kv_self.size; i++) {
@ -10121,7 +10121,7 @@ int llama_get_kv_cache_token_count(const struct llama_context * ctx) {
return result; return result;
} }
int llama_get_kv_cache_used_cells(const struct llama_context * ctx) { int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx) {
return ctx->kv_self.used; return ctx->kv_self.used;
} }
@ -10603,7 +10603,7 @@ int llama_eval(
struct llama_context * ctx, struct llama_context * ctx,
llama_token * tokens, llama_token * tokens,
int32_t n_tokens, int32_t n_tokens,
int n_past) { int32_t n_past) {
llama_kv_cache_seq_rm(ctx->kv_self, -1, n_past, -1); llama_kv_cache_seq_rm(ctx->kv_self, -1, n_past, -1);
const int ret = llama_decode_internal(*ctx, llama_batch_get_one(tokens, n_tokens, n_past, 0)); const int ret = llama_decode_internal(*ctx, llama_batch_get_one(tokens, n_tokens, n_past, 0));
@ -10618,7 +10618,7 @@ int llama_eval_embd(
struct llama_context * ctx, struct llama_context * ctx,
float * embd, float * embd,
int32_t n_tokens, int32_t n_tokens,
int n_past) { int32_t n_past) {
llama_kv_cache_seq_rm(ctx->kv_self, -1, n_past, -1); llama_kv_cache_seq_rm(ctx->kv_self, -1, n_past, -1);
llama_batch batch = { n_tokens, nullptr, embd, nullptr, nullptr, nullptr, nullptr, n_past, 1, 0, }; llama_batch batch = { n_tokens, nullptr, embd, nullptr, nullptr, nullptr, nullptr, n_past, 1, 0, };
@ -10689,7 +10689,7 @@ void llama_batch_free(struct llama_batch batch) {
if (batch.logits) free(batch.logits); if (batch.logits) free(batch.logits);
} }
int llama_decode( int32_t llama_decode(
struct llama_context * ctx, struct llama_context * ctx,
struct llama_batch batch) { struct llama_batch batch) {
const int ret = llama_decode_internal(*ctx, batch); const int ret = llama_decode_internal(*ctx, batch);
@ -10737,11 +10737,11 @@ llama_token llama_token_nl(const struct llama_model * model) {
return model->vocab.linefeed_id; return model->vocab.linefeed_id;
} }
int llama_add_bos_token(const struct llama_model * model) { int32_t llama_add_bos_token(const struct llama_model * model) {
return model->vocab.special_add_bos; return model->vocab.special_add_bos;
} }
int llama_add_eos_token(const struct llama_model * model) { int32_t llama_add_eos_token(const struct llama_model * model) {
return model->vocab.special_add_eos; return model->vocab.special_add_eos;
} }
@ -10761,12 +10761,12 @@ llama_token llama_token_eot(const struct llama_model * model) {
return model->vocab.special_eot_id; return model->vocab.special_eot_id;
} }
int llama_tokenize( int32_t llama_tokenize(
const struct llama_model * model, const struct llama_model * model,
const char * text, const char * text,
int text_len, int32_t text_len,
llama_token * tokens, llama_token * tokens,
int n_max_tokens, int32_t n_max_tokens,
bool add_bos, bool add_bos,
bool special) { bool special) {
auto res = llama_tokenize_internal(model->vocab, std::string(text, text_len), add_bos, special); auto res = llama_tokenize_internal(model->vocab, std::string(text, text_len), add_bos, special);
@ -10794,7 +10794,7 @@ static std::string llama_decode_text(const std::string & text) {
} }
// does not write null-terminator to buf // does not write null-terminator to buf
int llama_token_to_piece(const struct llama_model * model, llama_token token, char * buf, int length) { int32_t llama_token_to_piece(const struct llama_model * model, llama_token token, char * buf, int32_t length) {
if (0 <= token && token < llama_n_vocab(model)) { if (0 <= token && token < llama_n_vocab(model)) {
switch (llama_vocab_get_type(model->vocab)) { switch (llama_vocab_get_type(model->vocab)) {
case LLAMA_VOCAB_TYPE_SPM: { case LLAMA_VOCAB_TYPE_SPM: {

63
llama.h
View File

@ -226,7 +226,7 @@ extern "C" {
// model quantization parameters // model quantization parameters
typedef struct llama_model_quantize_params { typedef struct llama_model_quantize_params {
int nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency() int32_t nthread; // number of threads to use for quantizing, if <=0 will use std::thread::hardware_concurrency()
enum llama_ftype ftype; // quantize to this llama_ftype enum llama_ftype ftype; // quantize to this llama_ftype
bool allow_requantize; // allow quantizing non-f32/f16 tensors bool allow_requantize; // allow quantizing non-f32/f16 tensors
bool quantize_output_tensor; // quantize output.weight bool quantize_output_tensor; // quantize output.weight
@ -310,21 +310,20 @@ extern "C" {
LLAMA_API int64_t llama_time_us(void); LLAMA_API int64_t llama_time_us(void);
LLAMA_API int llama_max_devices (void); LLAMA_API int32_t llama_max_devices(void);
LLAMA_API bool llama_mmap_supported (void); LLAMA_API bool llama_mmap_supported (void);
LLAMA_API bool llama_mlock_supported(void); LLAMA_API bool llama_mlock_supported(void);
LLAMA_API const struct llama_model * llama_get_model(const struct llama_context * ctx); LLAMA_API const struct llama_model * llama_get_model(const struct llama_context * ctx);
// TODO: become more consistent with returned int types across the API
LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx); LLAMA_API uint32_t llama_n_ctx (const struct llama_context * ctx);
LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx); LLAMA_API uint32_t llama_n_batch (const struct llama_context * ctx);
LLAMA_API enum llama_vocab_type llama_vocab_type(const struct llama_model * model); LLAMA_API enum llama_vocab_type llama_vocab_type(const struct llama_model * model);
LLAMA_API int llama_n_vocab (const struct llama_model * model); LLAMA_API int32_t llama_n_vocab (const struct llama_model * model);
LLAMA_API int llama_n_ctx_train(const struct llama_model * model); LLAMA_API int32_t llama_n_ctx_train(const struct llama_model * model);
LLAMA_API int llama_n_embd (const struct llama_model * model); LLAMA_API int32_t llama_n_embd (const struct llama_model * model);
// Get the model's RoPE frequency scaling factor // Get the model's RoPE frequency scaling factor
LLAMA_API float llama_rope_freq_scale_train(const struct llama_model * model); LLAMA_API float llama_rope_freq_scale_train(const struct llama_model * model);
@ -335,19 +334,19 @@ extern "C" {
// - GGUF array values are not supported by these functions // - GGUF array values are not supported by these functions
// Get metadata value as a string by key name // Get metadata value as a string by key name
LLAMA_API int llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size); LLAMA_API int32_t llama_model_meta_val_str(const struct llama_model * model, const char * key, char * buf, size_t buf_size);
// Get the number of metadata key/value pairs // Get the number of metadata key/value pairs
LLAMA_API int llama_model_meta_count(const struct llama_model * model); LLAMA_API int32_t llama_model_meta_count(const struct llama_model * model);
// Get metadata key name by index // Get metadata key name by index
LLAMA_API int llama_model_meta_key_by_index(const struct llama_model * model, int i, char * buf, size_t buf_size); LLAMA_API int32_t llama_model_meta_key_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size);
// Get metadata value as a string by index // Get metadata value as a string by index
LLAMA_API int llama_model_meta_val_str_by_index(const struct llama_model * model, int i, char * buf, size_t buf_size); LLAMA_API int32_t llama_model_meta_val_str_by_index(const struct llama_model * model, int32_t i, char * buf, size_t buf_size);
// Get a string describing the model type // Get a string describing the model type
LLAMA_API int llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size); LLAMA_API int32_t llama_model_desc(const struct llama_model * model, char * buf, size_t buf_size);
// Returns the total size of all the tensors in the model in bytes // Returns the total size of all the tensors in the model in bytes
LLAMA_API uint64_t llama_model_size(const struct llama_model * model); LLAMA_API uint64_t llama_model_size(const struct llama_model * model);
@ -359,7 +358,7 @@ extern "C" {
LLAMA_API struct ggml_tensor * llama_get_model_tensor(struct llama_model * model, const char * name); LLAMA_API struct ggml_tensor * llama_get_model_tensor(struct llama_model * model, const char * name);
// Returns 0 on success // Returns 0 on success
LLAMA_API int llama_model_quantize( LLAMA_API uint32_t llama_model_quantize(
const char * fname_inp, const char * fname_inp,
const char * fname_out, const char * fname_out,
const llama_model_quantize_params * params); const llama_model_quantize_params * params);
@ -370,20 +369,20 @@ extern "C" {
// The model needs to be reloaded before applying a new adapter, otherwise the adapter // The model needs to be reloaded before applying a new adapter, otherwise the adapter
// will be applied on top of the previous one // will be applied on top of the previous one
// Returns 0 on success // Returns 0 on success
LLAMA_API DEPRECATED(int llama_apply_lora_from_file( LLAMA_API DEPRECATED(int32_t llama_apply_lora_from_file(
struct llama_context * ctx, struct llama_context * ctx,
const char * path_lora, const char * path_lora,
float scale, float scale,
const char * path_base_model, const char * path_base_model,
int n_threads), int32_t n_threads),
"use llama_model_apply_lora_from_file instead"); "use llama_model_apply_lora_from_file instead");
LLAMA_API int llama_model_apply_lora_from_file( LLAMA_API int32_t llama_model_apply_lora_from_file(
const struct llama_model * model, const struct llama_model * model,
const char * path_lora, const char * path_lora,
float scale, float scale,
const char * path_base_model, const char * path_base_model,
int n_threads); int32_t n_threads);
// //
// KV cache // KV cache
@ -439,10 +438,10 @@ extern "C" {
// Returns the number of tokens in the KV cache (slow, use only for debug) // Returns the number of tokens in the KV cache (slow, use only for debug)
// If a KV cell has multiple sequences assigned to it, it will be counted multiple times // If a KV cell has multiple sequences assigned to it, it will be counted multiple times
LLAMA_API int llama_get_kv_cache_token_count(const struct llama_context * ctx); LLAMA_API int32_t llama_get_kv_cache_token_count(const struct llama_context * ctx);
// Returns the number of used KV cells (i.e. have at least one sequence assigned to them) // Returns the number of used KV cells (i.e. have at least one sequence assigned to them)
LLAMA_API int llama_get_kv_cache_used_cells(const struct llama_context * ctx); LLAMA_API int32_t llama_get_kv_cache_used_cells(const struct llama_context * ctx);
// Clear the KV cache // Clear the KV cache
LLAMA_API void llama_kv_cache_clear( LLAMA_API void llama_kv_cache_clear(
@ -533,7 +532,7 @@ extern "C" {
struct llama_context * ctx, struct llama_context * ctx,
llama_token * tokens, llama_token * tokens,
int32_t n_tokens, int32_t n_tokens,
int n_past), int32_t n_past),
"use llama_decode() instead"); "use llama_decode() instead");
// Same as llama_eval, but use float matrix input directly. // Same as llama_eval, but use float matrix input directly.
@ -542,7 +541,7 @@ extern "C" {
struct llama_context * ctx, struct llama_context * ctx,
float * embd, float * embd,
int32_t n_tokens, int32_t n_tokens,
int n_past), int32_t n_past),
"use llama_decode() instead"); "use llama_decode() instead");
// Return batch for single sequence of tokens starting at pos_0 // Return batch for single sequence of tokens starting at pos_0
@ -574,7 +573,7 @@ extern "C" {
// 0 - success // 0 - success
// 1 - could not find a KV slot for the batch (try reducing the size of the batch or increase the context) // 1 - could not find a KV slot for the batch (try reducing the size of the batch or increase the context)
// < 0 - error // < 0 - error
LLAMA_API int llama_decode( LLAMA_API int32_t llama_decode(
struct llama_context * ctx, struct llama_context * ctx,
struct llama_batch batch); struct llama_batch batch);
@ -614,10 +613,10 @@ extern "C" {
LLAMA_API llama_token llama_token_nl (const struct llama_model * model); // next-line LLAMA_API llama_token llama_token_nl (const struct llama_model * model); // next-line
// Returns -1 if unknown, 1 for true or 0 for false. // Returns -1 if unknown, 1 for true or 0 for false.
LLAMA_API int llama_add_bos_token(const struct llama_model * model); LLAMA_API int32_t llama_add_bos_token(const struct llama_model * model);
// Returns -1 if unknown, 1 for true or 0 for false. // Returns -1 if unknown, 1 for true or 0 for false.
LLAMA_API int llama_add_eos_token(const struct llama_model * model); LLAMA_API int32_t llama_add_eos_token(const struct llama_model * model);
// codellama infill tokens // codellama infill tokens
LLAMA_API llama_token llama_token_prefix(const struct llama_model * model); // Beginning of infill prefix LLAMA_API llama_token llama_token_prefix(const struct llama_model * model); // Beginning of infill prefix
@ -635,12 +634,12 @@ extern "C" {
/// @return Returns a negative number on failure - the number of tokens that would have been returned /// @return Returns a negative number on failure - the number of tokens that would have been returned
/// @param special Allow tokenizing special and/or control tokens which otherwise are not exposed and treated as plaintext. /// @param special Allow tokenizing special and/or control tokens which otherwise are not exposed and treated as plaintext.
/// Does not insert a leading space. /// Does not insert a leading space.
LLAMA_API int llama_tokenize( LLAMA_API int32_t llama_tokenize(
const struct llama_model * model, const struct llama_model * model,
const char * text, const char * text,
int text_len, int32_t text_len,
llama_token * tokens, llama_token * tokens,
int n_max_tokens, int32_t n_max_tokens,
bool add_bos, bool add_bos,
bool special); bool special);
@ -648,11 +647,11 @@ extern "C" {
// Uses the vocabulary in the provided context. // Uses the vocabulary in the provided context.
// Does not write null terminator to the buffer. // Does not write null terminator to the buffer.
// User code is responsible to remove the leading whitespace of the first non-BOS token when decoding multiple tokens. // User code is responsible to remove the leading whitespace of the first non-BOS token when decoding multiple tokens.
LLAMA_API int llama_token_to_piece( LLAMA_API int32_t llama_token_to_piece(
const struct llama_model * model, const struct llama_model * model,
llama_token token, llama_token token,
char * buf, char * buf,
int length); int32_t length);
// //
// Grammar // Grammar
@ -704,7 +703,7 @@ extern "C" {
LLAMA_API void llama_sample_top_k( LLAMA_API void llama_sample_top_k(
struct llama_context * ctx, struct llama_context * ctx,
llama_token_data_array * candidates, llama_token_data_array * candidates,
int k, int32_t k,
size_t min_keep); size_t min_keep);
/// @details Nucleus sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751 /// @details Nucleus sampling described in academic paper "The Curious Case of Neural Text Degeneration" https://arxiv.org/abs/1904.09751
@ -763,7 +762,7 @@ extern "C" {
llama_token_data_array * candidates, llama_token_data_array * candidates,
float tau, float tau,
float eta, float eta,
int m, int32_t m,
float * mu); float * mu);
/// @details Mirostat 2.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words. /// @details Mirostat 2.0 algorithm described in the paper https://arxiv.org/abs/2007.14966. Uses tokens instead of words.
@ -836,8 +835,8 @@ extern "C" {
llama_beam_search_callback_fn_t callback, llama_beam_search_callback_fn_t callback,
void * callback_data, void * callback_data,
size_t n_beams, size_t n_beams,
int n_past, int32_t n_past,
int n_predict); int32_t n_predict);
// Performance information // Performance information
LLAMA_API struct llama_timings llama_get_timings(struct llama_context * ctx); LLAMA_API struct llama_timings llama_get_timings(struct llama_context * ctx);