MCPcopy Create free account
hub / github.com/appdevforall/CodeOnTheGo / state_write_data

Method state_write_data

subprojects/llama.cpp/src/llama-kv-cache.cpp:1766–1863  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1764}
1765
1766void llama_kv_cache::state_write_data(llama_io_write_i & io, const cell_ranges_t & cr) const {
1767 const auto & cells = v_cells[cr.strm];
1768
1769 const uint32_t v_trans = this->v_trans ? 1 : 0;
1770 const uint32_t n_layer = layers.size();
1771
1772 io.write(&v_trans, sizeof(v_trans));
1773 io.write(&n_layer, sizeof(n_layer));
1774
1775 // Iterate and write all the keys first, each row is a cell
1776 // Get whole range at a time
1777 for (const auto & layer : layers) {
1778 const uint32_t il = layer.il;
1779
1780 const uint32_t n_embd_k_gqa = hparams.n_embd_k_gqa(il);
1781
1782 auto * k = layer.k_stream[cr.strm];
1783
1784 // Write key type
1785 const int32_t k_type_i = (int32_t) k->type;
1786 io.write(&k_type_i, sizeof(k_type_i));
1787
1788 // Write row size of key
1789 const uint64_t k_size_row = ggml_row_size(k->type, n_embd_k_gqa);
1790 io.write(&k_size_row, sizeof(k_size_row));
1791
1792 // Read each range of cells of k_size length and write out
1793 for (const auto & range : cr.data) {
1794 const size_t range_size = range.second - range.first;
1795 const size_t buf_size = range_size * k_size_row;
1796 io.write_tensor(k, range.first * k_size_row, buf_size);
1797 }
1798 }
1799
1800 if (!v_trans) {
1801 for (const auto & layer : layers) {
1802 const uint32_t il = layer.il;
1803
1804 const uint32_t n_embd_v_gqa = hparams.n_embd_v_gqa(il);
1805
1806 auto * v = layer.v_stream[cr.strm];
1807 if (!v) {
1808 continue;
1809 }
1810
1811 // Write value type
1812 const int32_t v_type_i = (int32_t) v->type;
1813 io.write(&v_type_i, sizeof(v_type_i));
1814
1815 // Write row size of value
1816 const uint64_t v_size_row = ggml_row_size(v->type, n_embd_v_gqa);
1817 io.write(&v_size_row, sizeof(v_size_row));
1818
1819 // Read each range of cells of v_size length and write out
1820 for (const auto & range : cr.data) {
1821 const size_t range_size = range.second - range.first;
1822 const size_t buf_size = range_size * v_size_row;
1823 io.write_tensor(v, range.first * v_size_row, buf_size);

Callers

nothing calls this directly

Calls 7

ggml_row_sizeFunction · 0.85
ggml_type_sizeFunction · 0.85
n_embd_k_gqaMethod · 0.80
n_embd_v_gqaMethod · 0.80
sizeMethod · 0.65
writeMethod · 0.65
write_tensorMethod · 0.45

Tested by

no test coverage detected