{"id":361233,"date":"2024-05-21T01:09:30","date_gmt":"2024-05-21T01:09:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=361233"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T01:09:30","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=361233","title":{"rendered":"<span>16-, 8- \u0438 4-\u0431\u0438\u0442\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0423\u0436\u0435 \u043b\u0435\u0442 50, \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u0437\u0434\u0430\u043d\u0438\u044f \u00ab\u042f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0421\u0438\u00bb \u041a\u0435\u0440\u043d\u0438\u0433\u0430\u043d\u0430 \u0438 \u0420\u0438\u0442\u0447\u0438, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u00ab\u0447\u0438\u0441\u043b\u0430 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439\u00bb \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 32\u00a0\u0431\u0438\u0442\u0430, \u0430\u00a0\u0447\u0438\u0441\u043b\u0430 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438\u00a0\u2014 64\u00a0\u0431\u0438\u0442\u0430. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0435\u0449\u0451 \u0438 80-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u0430 \u00ablong double\u00bb. \u042d\u0442\u0438 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043d\u0443\u0436\u0434\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u041d\u043e\u00a0\u0432\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442, \u0441\u00a0\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u043f\u043e\u0445\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0443\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u0442\u0438\u043f\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u00ab\u0431\u043e\u043b\u044c\u0448\u0435\u00bb, \u0430 \u00ab\u043c\u0435\u043d\u044c\u0448\u0435\u00bb \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445, \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u00ab\u0441\u0436\u0430\u0442\u044c\u00bb \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c3f\/bad\/c83\/c3fbadc838abfa6ca95c601ca774109d.png\" width=\"780\" height=\"440\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c3f\/bad\/c83\/c3fbadc838abfa6ca95c601ca774109d.png\"\/><\/figure>\n<p>\u042f, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f,\u00a0\u0431\u044b\u043b \u0443\u0434\u0438\u0432\u043b\u0451\u043d, \u043a\u043e\u0433\u0434\u0430 \u0443\u0437\u043d\u0430\u043b \u043e\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 4-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u0414\u0430\u00a0\u043a\u0430\u043a\u00a0\u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e? \u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431\u00a0\u044d\u0442\u043e\u043c\u00a0\u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u0442\u0430\u043a\u0438\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0441\u0430\u043c\u044b\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u00a0\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430\u00a0\u0442\u0435\u043c, \u043a\u0430\u043a\u00a0\u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h2>\u00ab\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435\u00bb 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u00ab\u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u044b\u0445\u00bb \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043e\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0442\u0438\u043f\u0435. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/IEEE_754\">IEEE 754<\/a>, \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439,\u00a0\u0431\u044b\u043b \u043f\u0440\u0438\u043d\u044f\u0442 \u0432 1985\u00a0\u0433\u043e\u0434\u0443 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438 (Institute of Electrical and Electronics Engineers, IEEE). \u0422\u0438\u043f\u0438\u0447\u043d\u043e\u0435 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u044d\u0442\u0438\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6ab\/49e\/1a6\/6ab49e1a68d008f53d49cec5e3d7ee06.png\" alt=\"None\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a)\" width=\"700\" height=\"92\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ab\/49e\/1a6\/6ab49e1a68d008f53d49cec5e3d7ee06.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/IEEE_754\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u0442 \u0437\u0430\u0434\u0430\u0451\u0442 \u0437\u043d\u0430\u043a \u0447\u0438\u0441\u043b\u0430, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 8\u00a0\u0431\u0438\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0430\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0442\u044b\u00a0\u2014 \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443. \u0414\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u043f\u043e\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/699\/26b\/ccc\/69926bcccaf2ada34c1e2830eee78b1a.png\" alt=\"None\" title=\"\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a)\" width=\"370\" height=\"64\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/699\/26b\/ccc\/69926bcccaf2ada34c1e2830eee78b1a.png\"\/><\/p>\n<div><figcaption>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Floating-point_arithmetic\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043e\u0442\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d \u0447\u0438\u0441\u043b\u0430 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432\u00a0\u0438\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"python\">import struct  def print_float32(val: float):     \"\"\" Print Float32 in a binary form \"\"\"     m = struct.unpack('I', struct.pack('f', val))[0]     return format(m, 'b').zfill(32)  print_float32(0.15625)  # > 00111110001000000000000000000000<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u041f\u043e\u0437\u0436\u0435 \u043e\u043d\u0430 \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"python\">def ieee_754_conversion(sign, exponent_raw, mantissa, exp_len=8, mant_len=23):     \"\"\" Convert binary data into the floating point value \"\"\"     sign_mult = -1 if sign == 1 else 1     exponent = exponent_raw - (2 ** (exp_len - 1) - 1)     mant_mult = 1     for b in range(mant_len - 1, -1, -1):         if mantissa &amp; (2 ** b):             mant_mult += 1 \/ (2 ** (mant_len - b))      return sign_mult * (2 ** exponent) * mant_mult   ieee_754_conversion(0b0, 0b01111100, 0b01000000000000000000000)  #> 0.15625<\/code><\/pre>\n<p>\u0418 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438 IT\u2011\u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0441\u0442\u044b \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e\u00a0\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430:<\/p>\n<pre><code class=\"python\">val = 3.14 print(f\"{val:.20f}\")  # > 3.14000000000000012434<\/code><\/pre>\n<p>\u042d\u0442\u043e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0443\u0436 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041d\u043e, \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0431\u0438\u0442, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c. \u0418, \u043a\u0430\u043a \u043c\u044b \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u043d\u0430\u0447\u043d\u0451\u043c \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u043a\u0440\u043e\u043b\u0438\u0447\u044c\u0435\u0439 \u043d\u043e\u0440\u0435\u2026<\/p>\n<h2>16-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/h2>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 16-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043d\u0435\u00a0\u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0438\u043f\u0430\u00a0\u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 IEEE 754\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432 2008\u00a0\u0433\u043e\u0434\u0443. \u0423\u00a0\u0442\u0430\u043a\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0431\u0438\u0442, 5-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 10-\u0431\u0438\u0442\u043d\u0430\u044f \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d2d\/679\/d61\/d2d679d618d217e44262a8b6dd50cdc1.png\" alt=\"None\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a)\" width=\"609\" height=\"81\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d2d\/679\/d61\/d2d679d618d217e44262a8b6dd50cdc1.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Bfloat16_floating-point_format\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u0432\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0430\u044f\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u0438 \u043f\u0440\u0438\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0441 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u043d\u043e\u00a0\u0438\u0445 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043d\u0438\u0436\u0435, \u0447\u0435\u043c \u0443 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u0412\u044b\u0432\u0435\u0434\u0435\u043c 16-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"python\">import numpy as np  def print_float16(val: float):     \"\"\" Print Float16 in a binary form \"\"\"     m = struct.unpack('H', struct.pack('e', np.float16(val)))[0]     return format(m, 'b').zfill(16)  print_float16(3.14)  # > 0100001001001000<\/code><\/pre>\n<p>\u041f\u0440\u0438\u0431\u0435\u0433\u043d\u0443\u0432 \u043a \u043c\u0435\u0442\u043e\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b10000, 0b1001001000, exp_len=5, mant_len=10)  # > 3.140625<\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c\u043e\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0447\u0438\u0441\u043b\u0430 \u0442\u0438\u043f\u0430 <code>float16<\/code>:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b11110, 0b1111111111, exp_len=5, mant_len=10)  #> 65504.0<\/code><\/pre>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0442\u0443\u0442 <code>0b11110<\/code> \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 IEEE 754 \u0447\u0438\u0441\u043b\u043e <code>0b11111<\/code> \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u00ab\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438\u00bb. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b00001, 0b0000000000, exp_len=5, mant_len=10)  #> 0.00006104<\/code><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0442\u0438\u043f\u044b, \u0432\u0440\u043e\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e\u00a0\u2014 \u044d\u0442\u043e \u00ab\u043d\u0435\u0438\u0437\u0432\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044f\u00bb. \u0418, \u0441\u0443\u0434\u044f \u043f\u043e\u00a0\u0432\u0441\u0435\u043c\u0443, \u0434\u0430\u0436\u0435 \u0432\u00a0\u043d\u0430\u0448\u0438 \u0434\u043d\u0438 \u0432\u00a0C++ \u043d\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u041d\u043e\u00a0\u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u044d\u0442\u0438\u043c \u043d\u0435\u00a0\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h2>16-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u00abbfloat\u00bb (BFP16)<\/h2>\n<p>\u042d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Google Brain. \u041e\u043d \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u043d\u0443\u0436\u0434 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (\u0431\u0443\u043a\u0432\u0430 \u00abB\u00bb \u0432\u00a0\u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438\u00a0\u2014 \u044d\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u00abbrain\u00bb). \u042d\u0442\u043e\u00a0\u2014 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u00ab\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e\u00bb 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430: \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 8\u00a0\u0431\u0438\u0442, \u0432\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>bfloat16<\/code>, \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u0443\u00a0<code>float32<\/code>. \u041d\u043e\u00a0\u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u044b\u00a0\u0431\u044b\u043b \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d \u0434\u043e 7\u00a0\u0431\u0438\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/dfb\/7f4\/b53\/dfb7f4b531f5bf6f02aaf8299026c618.png\" alt=\"None\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 bfloat16 (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a)\" width=\"609\" height=\"81\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/dfb\/7f4\/b53\/dfb7f4b531f5bf6f02aaf8299026c618.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 bfloat16 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Bfloat16_floating-point_format\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b10000000, 0b1001001, exp_len=8, mant_len=7)  #> 3.140625<\/code><\/pre>\n<p>\u041a\u0430\u043a\u00a0\u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e\u00a0\u2014 \u0438\u0437\u2011\u0437\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442 <code>bfloat16<\/code> \u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u00a0\u0441\u0435\u0431\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0447\u0435\u043c <code>float16<\/code>:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b11111110, 0b1111111, exp_len=8, mant_len=7)  #> 3.3895313892515355e+38<\/code><\/pre>\n<p>\u042d\u0442\u043e\u00a0\u2014 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 <code>65504.0<\/code> \u0438\u0437\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043d\u043e, \u043a\u0430\u043a\u00a0\u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b <code>bfloat16<\/code> \u043d\u0438\u0436\u0435 \u0438\u0437\u2011\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0438\u0442. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u0442\u0438\u043f\u0430 \u0432\u00a0TensorFlow:<\/p>\n<pre><code class=\"python\">import tensorflow as tf  print(f\"{tf.constant(1.2, dtype=tf.float16).numpy().item():.12f}\")  # > 1.200195312500  print(f\"{tf.constant(1.2, dtype=tf.bfloat16).numpy().item():.12f}\")  # > 1.203125000000<\/code><\/pre>\n<h2>8-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (FP8)<\/h2>\n<p>\u042d\u0442\u043e\u0442 (\u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u044b\u0439) \u0444\u043e\u0440\u043c\u0430\u0442\u00a0\u0431\u044b\u043b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d \u0432 2022\u00a0\u0433\u043e\u0434\u0443 \u0438, \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043e\u043d \u0442\u043e\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f\u00a0\u0446\u0435\u043b\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u041c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438\u0445 \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0443\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 GPU. \u0424\u043e\u0440\u043c\u0430\u0442 FP8\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u00a0\u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: E4M3\u00a0(4-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 3-\u0431\u0438\u0442\u043d\u0430\u044f \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0430) \u0438 E5M2\u00a0(5-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 2-\u0431\u0438\u0442\u043d\u0430\u044f \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0430):<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/0b1\/dbb\/d22\/0b1dbbd22150843b54a5b1ec4562f9e2.png\" alt=\"None\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a)\" width=\"700\" height=\"122\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0b1\/dbb\/d22\/0b1dbbd22150843b54a5b1ec4562f9e2.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Minifloat\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u044b\u044f\u0441\u043d\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 FP8:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b1111, 0b110, exp_len=4, mant_len=3)  # > 448.0  ieee_754_conversion(0, 0b11110, 0b11, exp_len=5, mant_len=2)  # > 57344.0<\/code><\/pre>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 FP8 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0432 TensorFlow:<\/p>\n<pre><code class=\"python\">import tensorflow as tf from tensorflow.python.framework import dtypes   a_fp8 = tf.constant(3.14, dtype=dtypes.float8_e4m3fn) print(a_fp8)  # > 3.25  a_fp8 = tf.constant(3.14, dtype=dtypes.float8_e5m2) print(a_fp8)  # > 3.0<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u043d\u0443\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0431\u0430 \u0442\u0438\u043f\u0430:<\/p>\n<pre><code class=\"python\">import numpy as np import tensorflow as tf from tensorflow.python.framework import dtypes import matplotlib.pyplot as plt  length = np.pi * 4 resolution = 200 xvals = np.arange(0, length, length \/ resolution) wave = np.sin(xvals) wave_fp8_1 = tf.cast(wave, dtypes.float8_e4m3fn) wave_fp8_2 = tf.cast(wave, dtypes.float8_e5m2)  plt.rcParams[\"figure.figsize\"] = (14, 5) plt.plot(xvals, wave_fp8_1.numpy()) plt.plot(xvals, wave_fp8_2.numpy()) plt.show()<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043f\u043b\u043e\u0445:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ce\/3eb\/306\/2ce3eb3061c1fd7b6091a5a94a671963.png\" alt=\"None\" title=\"\u0421\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 FP8 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)\" width=\"700\" height=\"240\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ce\/3eb\/306\/2ce3eb3061c1fd7b6091a5a94a671963.png\"\/><\/p>\n<div><figcaption>\u0421\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 FP8 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0443\u0442 \u044f\u0441\u043d\u043e \u0432\u0438\u0434\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043d\u043e\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430\u00a0\u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443!<\/p>\n<h2>4-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (FP4, NF4)<\/h2>\n<p>\u0410\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a\u00a0\u0441\u0430\u043c\u043e\u0439 \u00ab\u0431\u0435\u0437\u0443\u043c\u043d\u043e\u0439\u00bb \u0442\u0435\u043c\u0435\u00a0\u2014 \u043a 4-\u0431\u0438\u0442\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (FP4). \u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0430\u043a\u0438\u0435 \u0447\u0438\u0441\u043b\u0430\u00a0\u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 IEEE, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 1\u00a0\u0431\u0438\u0442 \u043d\u0430\u00a0\u0437\u043d\u0430\u043a, 2\u00a0\u0431\u0438\u0442\u0430 \u043d\u0430\u00a0\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 1\u00a0\u0431\u0438\u0442 \u043d\u0430\u00a0\u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bf3\/d1f\/be5\/bf3d1fbe54f3e486040f46e75c87e666.png\" alt=\"None\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f FP4 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)\" width=\"700\" height=\"54\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bf3\/d1f\/be5\/bf3d1fbe54f3e486040f46e75c87e666.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f FP4 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 FP4, \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u043e. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 16\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432!<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f 4-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u0438\u043f\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c NormalFloat (NF4). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f NF4\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f NF4\u00a0\u043b\u0435\u0433\u043a\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d \u0432\u00a0\u0432\u0438\u0434\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (\u043f\u0440\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439):<\/p>\n<pre><code class=\"python\">[-1.0, -0.6961928009986877, -0.5250730514526367, -0.39491748809814453,   -0.28444138169288635, -0.18477343022823334, -0.09105003625154495, 0.0,   0.07958029955625534, 0.16093020141124725, 0.24611230194568634, 0.33791524171829224,    0.44070982933044434, 0.5626170039176941, 0.7229568362236023, 1.0]<\/code><\/pre>\n<p>\u0418 \u0442\u0438\u043f FP4, \u0438 \u0442\u0438\u043f NF4\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0Python\u2011\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"https:\/\/github.com\/TimDettmers\/bitsandbytes\">bitsandbytes<\/a>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435, \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 <code>[1.0, 2.0, 3.0, 4.0]<\/code> \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442 FP4:<\/p>\n<pre><code class=\"python\">from bitsandbytes import functional as bf  def print_uint(val: int, n_digits=8) -> str:     \"\"\" Convert 42 => \ufffd' \"\"\"     return format(val, 'b').zfill(n_digits)  device = torch.device(\"cuda\") x = torch.tensor([1.0, 2.0, 3.0, 4.0], device=device) x_4bit, qstate = bf.quantize_fp4(x, blocksize=64)  print(x_4bit) # > tensor([[117], [35]], dtype=torch.uint8)  print_uint(x_4bit[0].item()) # > 01110101 print_uint(x_4bit[1].item()) # > 00100011  print(qstate) # > (tensor([4.]),  # >  'fp4',  # >  tensor([ 0.0000,  0.0052,  0.6667,  1.0000,  0.3333,  0.5000,  0.1667,  0.2500, # >           0.0000, -0.0052, -0.6667, -1.0000, -0.3333, -0.5000, -0.1667, -0.2500])])<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: 16-\u0431\u0438\u0442\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <code>[117, 35]<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0430\u0448\u0438 4\u00a0\u0447\u0438\u0441\u043b\u0430, \u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u00ab\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u00bb, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f 4.0\u00a0\u0438 \u0442\u0435\u043d\u0437\u043e\u0440 \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044c\u044e FP4-\u0447\u0438\u0441\u043b\u0430\u043c\u0438.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0435\u0440\u0432\u043e\u0435 4-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e\u00a0\u2014 \u044d\u0442\u043e \u00ab0111\u00bb (=7). \u0412\u00a0\u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439\u00a0\u2014 \u044d\u0442\u043e 0.25; 0.25*4\u00a0= 1.0. \u0412\u0442\u043e\u0440\u043e\u0435 \u0447\u0438\u0441\u043b\u043e\u00a0\u2014 \u044d\u0442\u043e \u00ab0101\u00bb (=5), \u0430\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u2014 0.5*4\u00a0= 2.0. \u0422\u0440\u0435\u0442\u044c\u0435 \u0447\u0438\u0441\u043b\u043e\u00a0\u2014 \u044d\u0442\u043e \u00ab0010\u00bb, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u0432\u043d\u044f\u0435\u0442\u0441\u044f 2, \u0430\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u2014 0.666*4\u00a0= 2.666, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e \u043a 3, \u043d\u043e\u00a0\u043d\u0435\u00a0\u0440\u0430\u0432\u043d\u043e \u044d\u0442\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u00a0\u043f\u0440\u0438\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 4-\u0431\u0438\u0442\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0451\u043c\u0441\u044f \u0441\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u00ab0011\u00bb\u00a0\u2014 \u044d\u0442\u043e 3, \u0435\u043c\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 1.000*4\u00a0= 4.0.<\/p>\n<p>\u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u00a0\u043d\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0421\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>bitsandbytes<\/code> \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">x = bf.dequantize_fp4(x_4bit, qstate) print(x)  # > tensor([1.000, 2.000, 2.666, 4.000])<\/code><\/pre>\n<p>4-\u0431\u0438\u0442\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0447\u0438\u0441\u0435\u043b \u0442\u043e\u0436\u0435 \u043e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0430\u0441\u0441\u0438\u0432 <code>[1.0, 2.0, 3.0, 64.0]<\/code> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 <code>[0.333, 0.333, 0.333, 64.0]<\/code>. \u041d\u043e \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043d \u0434\u0430\u0451\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u0414\u0430\u0432\u0430\u0439\u0442\u0435, \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 FP4:<\/p>\n<pre><code class=\"python\">import matplotlib.pyplot as plt import numpy as np from bitsandbytes import functional as bf  length = np.pi * 4 resolution = 256 xvals = np.arange(0, length, length \/ resolution) wave = np.sin(xvals)  x_4bit, qstate = bf.quantize_fp4(torch.tensor(wave, dtype=torch.float32, device=device), blocksize=64) dq = bf.dequantize_fp4(x_4bit, qstate)  plt.rcParams[\"figure.figsize\"] = (14, 5) plt.title('FP8 Sine Wave') plt.plot(xvals, wave) plt.plot(xvals, dq.cpu().numpy()) plt.show()<\/code><\/pre>\n<p>\u0422\u0443\u0442, \u0447\u0442\u043e \u043d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0432\u0438\u0434\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043b\u0438\u0447\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8a6\/1a5\/42c\/8a61a542c3ed08a4a7ed1e9d1ccf8617.png\" alt=\"None\" title=\"\u0421\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 FP4 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)\" width=\"700\" height=\"241\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8a6\/1a5\/42c\/8a61a542c3ed08a4a7ed1e9d1ccf8617.png\"\/><\/p>\n<div><figcaption>\u0421\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 FP4 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u0438\u043f\u0435 NF4 \u2014 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438 \u0441\u0430\u043c\u0438 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <code>quantize_nf4<\/code> \u0438 <code>dequantize_nf4<\/code>; \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c \u0436\u0435, \u043a\u0430\u043a \u043f\u0440\u0435\u0436\u0434\u0435. \u041d\u043e, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 4-\u0431\u0438\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043b\u0438\u0448\u044c \u0441 CUDA; \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 CPU \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f.<\/p>\n<h2>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u0432\u00a0\u0440\u043e\u043b\u0438 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044d\u0442\u0430\u043f\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451. \u041f\u0440\u0438\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 Python\u2011\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <a href=\"https:\/\/huggingface.co\/docs\/transformers\/main_classes\/quantization\">transformers<\/a> \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432 4-\u0431\u0438\u0442\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435. \u0414\u043b\u044f\u00a0\u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432 <code>True<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>load_in_4-bit<\/code>. \u041d\u043e\u00a0\u0431\u0443\u0434\u0435\u043c \u0447\u0435\u0441\u0442\u043d\u044b: \u044d\u0442\u043e \u043d\u0435\u00a0\u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442 \u043d\u0430\u0441 \u043a\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u043d\u043e\u0432\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0447\u0438\u0441\u0435\u043b \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430\u00a0\u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0431\u0435\u0433\u043d\u0435\u043c \u043a \u00ab\u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u043e\u043c\u0443\u00bb \u043f\u0440\u0438\u043c\u0435\u0440\u0443\u00a0\u2014 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c, \u043e\u0431\u0443\u0447\u0438\u043c \u0435\u0451 \u0438 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0435\u0439, \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0432 4-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430.<\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<pre><code class=\"python\">import torch import torch.nn as nn import torch.optim as optim from typing import Any  class NetNormal(nn.Module):     def __init__(self):         super().__init__()         self.flatten = nn.Flatten()         self.model = nn.Sequential(             nn.Linear(784, 128),             nn.ReLU(),             nn.Linear(128, 64),             nn.ReLU(),             nn.Linear(64, 10)         )            def forward(self, x):         x = self.flatten(x)         x = self.model(x)         return F.log_softmax(x, dim=1)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u042f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 <a href=\"https:\/\/pytorch.org\/vision\/0.15\/generated\/torchvision.datasets.MNIST.html\">MNIST<\/a>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 70000 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \u0440\u0443\u043a\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0446\u0438\u0444\u0440 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 28&#215;28 (\u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0435 \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u044d\u0442\u043e\u0442 \u043d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u042f\u043d\u0443 \u041b\u0435\u043a\u0443\u043d\u0443 \u0438 \u041a\u043e\u0440\u0438\u043d\u043d\u0435 \u041a\u043e\u0440\u0442\u0435\u0437, \u043e\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0438 <a href=\"https:\/\/creativecommons.org\/licenses\/by-sa\/3.0\/\">Creative Commons Attribution-Share Alike 3.0<\/a>). \u041d\u0430\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438 \u2014 60000 \u0443\u0447\u0435\u0431\u043d\u044b\u0445 \u0438 10000 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0412\u044b\u0431\u043e\u0440 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0435 \u043f\u0443\u0442\u0451\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 <code>train=True|False<\/code>.<\/p>\n<pre><code class=\"python\">from torchvision import datasets, transforms  train_loader = torch.utils.data.DataLoader(     datasets.MNIST(\"data\", train=True, download=True,                    transform=transforms.Compose([                        transforms.ToTensor(),                        transforms.Normalize((0.1307,), (0.3081,))                    ])),     batch_size=batch_size, shuffle=True)  test_loader = torch.utils.data.DataLoader(     datasets.MNIST(\"data\", train=False, transform=transforms.Compose([                        transforms.ToTensor(),                        transforms.Normalize((0.1307,), (0.3081,))                    ])),     batch_size=batch_size, shuffle=True)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043a\u00a0\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0443\u0447\u0438\u0442\u044c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u00bb \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0441\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0447\u0438\u0441\u0435\u043b.<\/p>\n<pre><code class=\"python\">device = torch.device(\"cuda\")  batch_size = 64 epochs = 4 log_interval = 500  def train(model: nn.Module, train_loader: torch.utils.data.DataLoader,           optimizer: Any, epoch: int):     \"\"\" Train the model \"\"\"     model.train()     for batch_idx, (data, target) in enumerate(train_loader):         data, target = data.to(device), target.to(device)         optimizer.zero_grad()         output = model(data)         loss = F.nll_loss(output, target)         loss.backward()         optimizer.step()                  if batch_idx % log_interval == 0:             print(f'Train Epoch: {epoch} [{batch_idx * len(data)}\/{len(train_loader.dataset)}]\\tLoss: {loss.item():.5f}')              def test(model: nn.Module, test_loader: torch.utils.data.DataLoader):     \"\"\" Test the model \"\"\"     model.eval()     test_loss = 0     correct = 0     with torch.no_grad():         for data, target in test_loader:             data, target = data.to(device), target.to(device)             t_start = time.monotonic()             output = model(data)             test_loss += F.nll_loss(output, target, reduction='sum').item()             pred = output.argmax(dim=1, keepdim=True)             correct += pred.eq(target.view_as(pred)).sum().item()      test_loss \/= len(test_loader.dataset)     t_diff = time.monotonic() - t_start      print(f\"Test set: Average loss: {test_loss:.4f}, Accuracy: {correct}\/{len(test_loader.dataset)} ({100. * correct \/ len(test_loader.dataset)}%)\\n\")  def get_size_kb(model: nn.Module):     \"\"\" Get model size in kilobytes \"\"\"     size_model = 0     for param in model.parameters():         if param.data.is_floating_point():             size_model += param.numel() * torch.finfo(param.data.dtype).bits         else:             size_model += param.numel() * torch.iinfo(param.data.dtype).bits     print(f\"Model size: {size_model \/ (8*1024)} KB\")  # \u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 model = NetNormal().to(device) optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5) for epoch in range(1, epochs + 1):     train(model, train_loader, optimizer, epoch)     test(model, test_loader)  get_size(model)  # \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 torch.save(model.state_dict(), \"mnist_model.pt\")<\/code><\/pre>\n<p>\u042f, \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>get_size_kb<\/code>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u0437\u043d\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0\u043a\u0438\u043b\u043e\u0431\u0430\u0439\u0442\u0430\u0445.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a\u00a0\u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<pre><code class=\"python\">Train Epoch: 1 [0\/60000] Loss: 2.31558 Train Epoch: 1 [32000\/60000] Loss: 0.53704 Test set: Average loss: 0.2684, Accuracy: 9225\/10000 (92.25%)  Train Epoch: 2 [0\/60000] Loss: 0.19791 Train Epoch: 2 [32000\/60000] Loss: 0.17268 Test set: Average loss: 0.1998, Accuracy: 9401\/10000 (94.01%)  Train Epoch: 3 [0\/60000] Loss: 0.30570 Train Epoch: 3 [32000\/60000] Loss: 0.33042 Test set: Average loss: 0.1614, Accuracy: 9530\/10000 (95.3%)  Train Epoch: 4 [0\/60000] Loss: 0.20046 Train Epoch: 4 [32000\/60000] Loss: 0.19178 Test set: Average loss: 0.1376, Accuracy: 9601\/10000 (96.01%)  Model size: 427.2890625 KB<\/code><\/pre>\n<p>\u041d\u0430\u0448\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432 96%, \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u043e\u0439 \u0441\u0435\u0442\u0438\u00a0\u2014 427\u00a0\u041a\u0431.<\/p>\n<p>\u0410\u00a0\u0442\u0435\u043f\u0435\u0440\u044c\u00a0\u2014 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435! \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c 8-\u0431\u0438\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u0443\u0434\u0435\u0442, \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0442\u0430\u043a\u0438\u043c\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u043f\u0440\u0435\u0436\u0434\u0435. \u042f\u00a0\u043b\u0438\u0448\u044c \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u0441\u043b\u043e\u0439 <code>Linear<\/code> \u043d\u0430\u00a0\u0441\u043b\u043e\u0439 <code>Linear8bitLt<\/code>.<\/p>\n<pre><code class=\"python\">from bitsandbytes.nn import Linear8bitLt  class Net8Bit(nn.Module):     def __init__(self):         super().__init__()         self.flatten = nn.Flatten()         self.model = nn.Sequential(             Linear8bitLt(784, 128, has_fp16_weights=False),             nn.ReLU(),             Linear8bitLt(128, 64, has_fp16_weights=False),             nn.ReLU(),             Linear8bitLt(64, 10, has_fp16_weights=False)         )            def forward(self, x):         x = self.flatten(x)         x = self.model(x)         return F.log_softmax(x, dim=1)  device = torch.device(\"cuda\")  # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 model = Net8Bit() model.load_state_dict(torch.load(\"mnist_model.pt\")) get_size_kb(model) print(model.model[0].weight)  # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 model = model.to(device)  get_size_kb(model) print(model.model[0].weight)  # \u0417\u0430\u043f\u0443\u0441\u043a test(model, test_loader)<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u2014 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code class=\"python\">Model size: 427.2890625 KB Parameter(Int8Params([[ 0.0071,  0.0059,  0.0146,  ...,  0.0111, -0.0041,  0.0025],             ...,             [-0.0131, -0.0093, -0.0016,  ..., -0.0156,  0.0042,  0.0296]]))  Model size: 107.4140625 KB Parameter(Int8Params([[  9,   7,  19,  ...,  14,  -5,   3],             ...,             [-21, -15,  -3,  ..., -25,   7,  47]], device='cuda:0',            dtype=torch.int8))  Test set: Average loss: 0.1347, Accuracy: 9600\/10000 (96.0%)<\/code><\/pre>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c\u00a0\u0431\u044b\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u0415\u0451 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u00a0\u0436\u0435, \u0432\u0435\u0441\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043a\u0430\u043a <code>[0.0071, 0.0059,\u2026]<\/code>. \u0412\u0441\u044f \u00ab\u043c\u0430\u0433\u0438\u044f\u00bb \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432\u00a0<code>cuda<\/code>\u00a0\u2014 \u043e\u043d\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432 4\u00a0\u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435. \u041a\u0430\u043a\u00a0\u0432\u0438\u0434\u043d\u043e, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0435\u0441\u043e\u0432 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c\u00a0\u0436\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043d\u0435\u00a0\u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442. \u0412\u00a0\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430\u00a0\u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u00a0\u043e\u043d\u0430 \u043d\u0435\u00a0\u043f\u043e\u0442\u0435\u0440\u044f\u043b\u0430 \u043d\u0438 \u0435\u0434\u0438\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438!<\/p>\n<p>\u0410\u00a0\u0442\u0435\u043f\u0435\u0440\u044c\u00a0\u2014 4-\u0431\u0438\u0442\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f:<\/p>\n<pre><code class=\"python\">from bitsandbytes.nn import LinearFP4, LinearNF4  class Net4Bit(nn.Module):     def __init__(self):         super().__init__()         self.flatten = nn.Flatten()         self.model = nn.Sequential(             LinearFP4(784, 128),             nn.ReLU(),             LinearFP4(128, 64),             nn.ReLU(),             LinearFP4(64, 10)         )            def forward(self, x):         x = self.flatten(x)         x = self.model(x)         return F.log_softmax(x, dim=1)  # \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 model = Net4Bit() model.load_state_dict(torch.load(\"mnist_model.pt\")) get_model_size(model) print(model.model[2].weight)  # \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 model = model.to(device)  get_model_size(model) print(model.model[2].weight)  # \u0417\u0430\u043f\u0443\u0441\u043a test(model, test_loader)<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<pre><code class=\"python\">Model size: 427.2890625 KB Parameter(Params4bit([[ 0.0916, -0.0453,  0.0891,  ...,  0.0430, -0.1094, -0.0751],             ...,             [-0.0079, -0.1021, -0.0094,  ..., -0.0124,  0.0889,  0.0048]]))  Model size: 54.1015625 KB Parameter(Params4bit([[ 95], [ 81], [109],             ...,             [ 34], [ 46], [ 33]], device='cuda:0', dtype=torch.uint8))  Test set: Average loss: 0.1414, Accuracy: 9579\/10000 (95.79%)<\/code><\/pre>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u043e\u0434\u0435\u043b\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0441\u044f \u0432 8 \u0440\u0430\u0437 \u2014 \u0441 427 \u0434\u043e 54 \u041a\u0431, \u043d\u043e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0443\u043f\u0430\u043b\u0430 \u043b\u0438\u0448\u044c \u043d\u0430 1%. \u041a\u0430\u043a \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e? \u041e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u2014 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e, \u0432\u0435\u0441\u0430 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0431\u043e\u043b\u0435\u0435 \u0438\u043b\u0438 \u043c\u0435\u043d\u0435\u0435 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e, \u0438 \u043f\u043e\u0442\u0435\u0440\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/pytorch.org\/docs\/stable\/generated\/torch.nn.functional.log_softmax.html\">Softmax<\/a>, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u0438\u0441\u043a\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0441\u0430\u043c\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u043e\u043b\u0438 \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043c\u0435\u0436\u0434\u0443 0,8 \u0438 0,9 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u2014 \u044d\u0442\u043e 0,1 \u0438\u043b\u0438 0,2.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043b\u0430\u0433\u0430\u044e \u2014 \u0432\u0430\u0436\u043d\u043e \u0431\u043e\u043b\u0435\u0435 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c. \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0447\u0438\u0441\u043b\u0430 \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432\u044b\u0434\u0430\u0441\u0442 \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<pre><code class=\"python\">dataset = datasets.MNIST('data', train=False, transform=transforms.Compose([                        transforms.ToTensor(),                        transforms.Normalize((0.1307,), (0.3081,))                    ]))  np.set_printoptions(precision=3, suppress=True)  # \u041d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c  data_in = dataset[4][0] for x in range(28):     for y in range(28):         print(f\"{data_in[0][x][y]: .1f}\", end=\" \")     print()<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u2014 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u0435 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/193\/1b8\/325\/1931b83257f4954f94d3e46c403e5bb9.png\" alt=\"None\" title=\"\u0412\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445\" width=\"700\" height=\"223\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/193\/1b8\/325\/1931b83257f4954f94d3e46c403e5bb9.png\"\/><\/p>\n<div><figcaption>\u0412\u044b\u0432\u043e\u0434 \u0434\u0430\u043d\u043d\u044b\u0445<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0432\u044b\u0434\u0430\u0441\u0442 \u00ab\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f\u00bb \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<pre><code class=\"python\"># \u041f\u043e\u0434\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c np.set_printoptions(precision=2, suppress=True)    # \u041f\u0440\u043e\u0433\u043d\u043e\u0437 with torch.no_grad():     output = model(data_in.to(device))     print(output[0].cpu().numpy())     ind = output.argmax(dim=1, keepdim=True)[0].cpu().item()     print(\"Result:\", ind)  # > [ -8.27 -13.89  -6.89 -11.13  -0.03  -8.09  -7.46  -7.6   -6.43  -3.77] # > Result: 4<\/code><\/pre>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 5-\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 (\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 numpy \u043d\u0443\u043c\u0435\u0440\u0443\u044e\u0442\u0441\u044f \u0441 0), \u0447\u0442\u043e\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0447\u0438\u0441\u043b\u0443 4.<\/p>\n<p>\u0412\u043e\u0442\u00a0\u2014 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b 8-\u0431\u0438\u0442\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438:<\/p>\n<pre><code class=\"python\"># > [ -9.09 -12.66  -8.42 -12.2   -0.01  -9.25  -8.29  -7.26  -8.36  -4.45] # > Result: 4<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u0432\u044b\u0434\u0430\u043b\u0430 4-\u0431\u0438\u0442\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c:<\/p>\n<pre><code class=\"python\"># > [ -8.56 -12.12  -7.52 -12.1   -0.01  -8.94  -7.84  -7.41  -7.31  -4.45] # > Result: 4<\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u00a0\u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u043d\u043e\u00a0\u0438\u043d\u0434\u0435\u043a\u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438 \u0442\u0435\u043c\u00a0\u0436\u0435.<\/p>\n<h2>\u0418\u0442\u043e\u0433\u0438<\/h2>\n<p>\u0412\u00a0\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f 16-\u0431\u0438\u0442\u043d\u044b\u0445, 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0438 4-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u041c\u044b \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0438 \u0441\u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0441\u00a0\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0438 4-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u0418, \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0437\u0430\u00a0\u0442\u0435\u043c, \u043a\u0430\u043a\u00a0\u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442,\u00a0\u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c. \u0423\u043c\u0435\u043d\u044c\u0448\u0430\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0447\u0438\u0441\u0435\u043b\u00a0\u2014 \u0441\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0434\u043e 4-\u0431\u0438\u0442\u043d\u043e\u0439, \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u043e\u0431\u044a\u0451\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043c\u043e\u0434\u0435\u043b\u0438, \u0432 8\u00a0\u0440\u0430\u0437, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u043f\u043e\u0442\u0435\u0440\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 \u00ab\u0438\u0433\u0440\u0443\u0448\u0435\u0447\u043d\u043e\u043c\u00bb \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0432\u00a0\u043f\u043e\u2011\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b (\u0442\u0435\u043c, \u043a\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u043e\u0439, \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e <a href=\"https:\/\/huggingface.co\/blog\/hf-bitsandbytes-integration\">\u044d\u0442\u043e\u0442<\/a> \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b).<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0432\u0430\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u00a0\u043e\u0431\u0449\u0438\u0445 \u0438\u0434\u0435\u044f\u0445, \u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u0432\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u041a\u0430\u043a\u00a0\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u00ab\u043d\u0443\u0436\u0434\u0430\u00a0\u2014 \u043c\u0430\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u0439\u00bb. \u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0451\u043c\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u0432 4\u20138\u00a0\u0440\u0430\u0437\u00a0\u2014 \u044d\u0442\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0435, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432\u00a0\u0446\u0435\u043d\u0435 \u043c\u0435\u0436\u0434\u0443 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u043c\u0438 \u0441\u00a0\u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0432 8, 16, 32\u00a0\u0438 64\u00a0\u0413\u0431 ;). <\/p>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u0430\u0436\u0435 4\u00a0\u0431\u0438\u0442\u0430\u00a0\u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u00a0\u043f\u0440\u0435\u0434\u0435\u043b. \u0412\u00a0\u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043e <a href=\"https:\/\/arxiv.org\/pdf\/2210.17323.pdf\">GTPQ<\/a>\u00a0\u0431\u044b\u043b\u0430 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043a\u0432\u0430\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u0435\u0441\u043e\u0432 \u0432 2\u00a0\u0438\u043b\u0438\u00a0\u0434\u0430\u0436\u0435 \u0432\u00a0\u0442\u0440\u0438 (1,5\u00a0\u0431\u0438\u0442\u0430!) \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f. \u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435\u00a0\u2014 \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443, \u043d\u043e\u00a0\u043d\u0435\u00a0\u043f\u043e\u00a0\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438: \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0440\u0430\u0437\u043c\u044b\u0448\u043b\u044f\u0442\u044c \u043e \u00ab\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438\u00bb \u043d\u0435\u0439\u0440\u043e\u0442\u0440\u0430\u043d\u0441\u043c\u0438\u0442\u0442\u0435\u0440\u043e\u0432 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043c\u043e\u0437\u0433\u0430. \u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e\u00a0\u043e\u043d\u0430 \u043d\u0435\u00a0\u0442\u0430\u043a \u0443\u0436 \u0438 \u0432\u044b\u0441\u043e\u043a\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, 2- \u0438\u043b\u0438 4-\u0431\u0438\u0442\u043d\u044b\u0435 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u043b\u0438\u0436\u0435, \u0447\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0435, \u043a\u00a0\u0442\u0435\u043c \u00ab\u043c\u043e\u0434\u0435\u043b\u044f\u043c\u00bb, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u00a0\u043d\u0430\u0448\u0438\u0445 \u0433\u043e\u043b\u043e\u0432\u0430\u0445.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e, \u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0435 \u043a \u043d\u0430\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c? ? ?<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041c\u044b \u0432\u00a0<a href=\"http:\/\/wunderfund.io\/\">wunderfund.io<\/a>\u00a0\u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/High-frequency_trading\">\u0432\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u043e\u0439 \u0430\u043b\u0433\u043e\u0442\u043e\u0440\u0433\u043e\u0432\u043b\u0435\u0439<\/a>\u00a0\u0441 2014 \u0433\u043e\u0434\u0430. \u0412\u044b\u0441\u043e\u043a\u043e\u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0430\u044f \u0442\u043e\u0440\u0433\u043e\u0432\u043b\u044f \u2014 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0435 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432 \u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0432 \u0432\u0441\u0435\u0433\u043e \u043c\u0438\u0440\u0430. \u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u0438\u0432\u0448\u0438\u0441\u044c \u043a \u043d\u0430\u043c, \u0432\u044b \u0441\u0442\u0430\u043d\u0435\u0442\u0435 \u0447\u0430\u0441\u0442\u044c\u044e \u044d\u0442\u043e\u0439 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0445\u0432\u0430\u0442\u043a\u0438.<\/p>\n<p>\u041c\u044b \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 low latency \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0434\u043b\u044f \u0443\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432. \u0413\u0438\u0431\u043a\u0438\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0431\u044e\u0440\u043e\u043a\u0440\u0430\u0442\u0438\u0438, \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u044b\u0441\u0442\u0440\u043e \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u0438 \u0432\u043e\u043f\u043b\u043e\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u0436\u0438\u0437\u043d\u044c.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0438\u0449\u0435\u043c \u043f\u043b\u044e\u0441\u043e\u0432\u0438\u043a\u043e\u0432, \u043f\u0438\u0442\u043e\u043d\u0438\u0441\u0442\u043e\u0432, \u0434\u0430\u0442\u0430-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u0438 \u043c\u043b-\u0440\u0438\u0441\u0435\u0440\u0447\u0435\u0440\u043e\u0432.<\/p>\n<p><a href=\"http:\/\/wunderfund.io\/#join_us\">\u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435<\/a><\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/776496\/\"> https:\/\/habr.com\/ru\/articles\/776496\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0423\u0436\u0435 \u043b\u0435\u0442 50, \u0441\u043e \u0432\u0440\u0435\u043c\u0451\u043d \u0432\u044b\u0445\u043e\u0434\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0438\u0437\u0434\u0430\u043d\u0438\u044f \u00ab\u042f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0421\u0438\u00bb \u041a\u0435\u0440\u043d\u0438\u0433\u0430\u043d\u0430 \u0438 \u0420\u0438\u0442\u0447\u0438, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u00ab\u0447\u0438\u0441\u043b\u0430 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439\u00bb \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 32\u00a0\u0431\u0438\u0442\u0430, \u0430\u00a0\u0447\u0438\u0441\u043b\u0430 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438\u00a0\u2014 64\u00a0\u0431\u0438\u0442\u0430. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0435\u0449\u0451 \u0438 80-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0442\u0438\u043f\u0430 \u00ablong double\u00bb. \u042d\u0442\u0438 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u043d\u0443\u0436\u0434\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u041d\u043e\u00a0\u0432\u00a0\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442, \u0441\u00a0\u043d\u0430\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u044d\u043f\u043e\u0445\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u0443\u00a0\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u0442\u0438\u043f\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u00ab\u0431\u043e\u043b\u044c\u0448\u0435\u00bb, \u0430 \u00ab\u043c\u0435\u043d\u044c\u0448\u0435\u00bb \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445, \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044c \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u00ab\u0441\u0436\u0430\u0442\u044c\u00bb \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u042f, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f,\u00a0\u0431\u044b\u043b \u0443\u0434\u0438\u0432\u043b\u0451\u043d, \u043a\u043e\u0433\u0434\u0430 \u0443\u0437\u043d\u0430\u043b \u043e\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0438 4-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0434\u043b\u044f\u00a0\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u0414\u0430\u00a0\u043a\u0430\u043a\u00a0\u0442\u0430\u043a\u043e\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e? \u041b\u0443\u0447\u0448\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431\u00a0\u044d\u0442\u043e\u043c\u00a0\u2014 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u00a0\u0442\u0430\u043a\u0438\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c \u0441\u0430\u043c\u044b\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0441\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u00a0\u043d\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u043d\u0435\u0439\u0440\u043e\u043d\u043d\u0443\u044e \u0441\u0435\u0442\u044c \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0437\u0430\u00a0\u0442\u0435\u043c, \u043a\u0430\u043a\u00a0\u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h2>\u00ab\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435\u00bb 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/h2>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a\u00a0\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u00ab\u044d\u043a\u0441\u0442\u0440\u0435\u043c\u0430\u043b\u044c\u043d\u044b\u0445\u00bb \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445\u00a0\u2014 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043e\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0442\u0438\u043f\u0435. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442 <a href=\"https:\/\/en.wikipedia.org\/wiki\/IEEE_754\">IEEE 754<\/a>, \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439,\u00a0\u0431\u044b\u043b \u043f\u0440\u0438\u043d\u044f\u0442 \u0432 1985\u00a0\u0433\u043e\u0434\u0443 \u0418\u043d\u0441\u0442\u0438\u0442\u0443\u0442\u043e\u043c \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0438 (Institute of Electrical and Electronics Engineers, IEEE). \u0422\u0438\u043f\u0438\u0447\u043d\u043e\u0435 32-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u044d\u0442\u0438\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 32-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/IEEE_754\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0438\u0442 \u0437\u0430\u0434\u0430\u0451\u0442 \u0437\u043d\u0430\u043a \u0447\u0438\u0441\u043b\u0430, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 8\u00a0\u0431\u0438\u0442\u043e\u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0430\u00a0\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0442\u044b\u00a0\u2014 \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443. \u0414\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u043f\u043e\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u043e\u0440\u043c\u0443\u043b\u0435:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Floating-point_arithmetic\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043e\u0442\u00a0\u2014 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d \u0447\u0438\u0441\u043b\u0430 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432\u00a0\u0438\u0445 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"python\">import struct  def print_float32(val: float):     \"\"\" Print Float32 in a binary form \"\"\"     m = struct.unpack('I', struct.pack('f', val))[0]     return format(m, 'b').zfill(32)  print_float32(0.15625)  # > 00111110001000000000000000000000<\/code><\/pre>\n<p>\u041d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u041f\u043e\u0437\u0436\u0435 \u043e\u043d\u0430 \u043d\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f:<\/p>\n<pre><code class=\"python\">def ieee_754_conversion(sign, exponent_raw, mantissa, exp_len=8, mant_len=23):     \"\"\" Convert binary data into the floating point value \"\"\"     sign_mult = -1 if sign == 1 else 1     exponent = exponent_raw - (2 ** (exp_len - 1) - 1)     mant_mult = 1     for b in range(mant_len - 1, -1, -1):         if mantissa &amp; (2 ** b):             mant_mult += 1 \/ (2 ** (mant_len - b))      return sign_mult * (2 ** exponent) * mant_mult   ieee_754_conversion(0b0, 0b01111100, 0b01000000000000000000000)  #> 0.15625<\/code><\/pre>\n<p>\u0418 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e\u00a0\u0432\u0441\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u0438 IT\u2011\u044d\u043d\u0442\u0443\u0437\u0438\u0430\u0441\u0442\u044b \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e\u00a0\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430:<\/p>\n<pre><code class=\"python\">val = 3.14 print(f\"{val:.20f}\")  # > 3.14000000000000012434<\/code><\/pre>\n<p>\u042d\u0442\u043e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0443\u0436 \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041d\u043e, \u0447\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0431\u0438\u0442, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c. \u0418, \u043a\u0430\u043a \u043c\u044b \u0441\u043a\u043e\u0440\u043e \u0443\u0432\u0438\u0434\u0438\u043c, \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439. \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u2014 \u043d\u0430\u0447\u043d\u0451\u043c \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u0435 \u043f\u043e \u043a\u0440\u043e\u043b\u0438\u0447\u044c\u0435\u0439 \u043d\u043e\u0440\u0435\u2026<\/p>\n<h2>16-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439<\/h2>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0440\u0430\u043d\u044c\u0448\u0435 \u043e\u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 16-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430\u0445 \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043d\u0435\u00a0\u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0442\u0438\u043f\u0430\u00a0\u0431\u044b\u043b\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e \u0432\u00a0\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 IEEE 754\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u0432 2008\u00a0\u0433\u043e\u0434\u0443. \u0423\u00a0\u0442\u0430\u043a\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0431\u0438\u0442, 5-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 10-\u0431\u0438\u0442\u043d\u0430\u044f \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0430:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Bfloat16_floating-point_format\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0442\u0430\u043a\u0438\u0445 \u0447\u0438\u0441\u0435\u043b \u0432\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0442\u043e\u0447\u043d\u043e \u0442\u0430\u043a\u0430\u044f\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u0438 \u043f\u0440\u0438\u00a0\u0440\u0430\u0431\u043e\u0442\u0435 \u0441 32-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438, \u043d\u043e\u00a0\u0438\u0445 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0431\u0435\u0437\u0443\u0441\u043b\u043e\u0432\u043d\u043e, \u043d\u0438\u0436\u0435, \u0447\u0435\u043c \u0443 32-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u0412\u044b\u0432\u0435\u0434\u0435\u043c 16-\u0431\u0438\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432\u00a0\u0434\u0432\u043e\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<pre><code class=\"python\">import numpy as np  def print_float16(val: float):     \"\"\" Print Float16 in a binary form \"\"\"     m = struct.unpack('H', struct.pack('e', np.float16(val)))[0]     return format(m, 'b').zfill(16)  print_float16(3.14)  # > 0100001001001000<\/code><\/pre>\n<p>\u041f\u0440\u0438\u0431\u0435\u0433\u043d\u0443\u0432 \u043a \u043c\u0435\u0442\u043e\u0434\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0443\u0436\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b10000, 0b1001001000, exp_len=5, mant_len=10)  # > 3.140625<\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c\u043e\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0447\u0438\u0441\u043b\u0430 \u0442\u0438\u043f\u0430 <code>float16<\/code>:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b11110, 0b1111111111, exp_len=5, mant_len=10)  #> 65504.0<\/code><\/pre>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0442\u0443\u0442 <code>0b11110<\/code> \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 IEEE 754 \u0447\u0438\u0441\u043b\u043e <code>0b11111<\/code> \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0434\u043b\u044f \u00ab\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u0438\u00bb. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b00001, 0b0000000000, exp_len=5, mant_len=10)  #> 0.00006104<\/code><\/pre>\n<p>\u0414\u043b\u044f\u00a0\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0442\u0438\u043f\u044b, \u0432\u0440\u043e\u0434\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e\u00a0\u2014 \u044d\u0442\u043e \u00ab\u043d\u0435\u0438\u0437\u0432\u0435\u0434\u0430\u043d\u043d\u0430\u044f \u0442\u0435\u0440\u0440\u0438\u0442\u043e\u0440\u0438\u044f\u00bb. \u0418, \u0441\u0443\u0434\u044f \u043f\u043e\u00a0\u0432\u0441\u0435\u043c\u0443, \u0434\u0430\u0436\u0435 \u0432\u00a0\u043d\u0430\u0448\u0438 \u0434\u043d\u0438 \u0432\u00a0C++ \u043d\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f\u00a0\u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u041d\u043e\u00a0\u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u0435 \u0442\u0438\u043f\u043e\u0432 \u044d\u0442\u0438\u043c \u043d\u0435\u00a0\u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<h2>16-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u00abbfloat\u00bb (BFP16)<\/h2>\n<p>\u042d\u0442\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Google Brain. \u041e\u043d \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f\u00a0\u043d\u0443\u0436\u0434 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f (\u0431\u0443\u043a\u0432\u0430 \u00abB\u00bb \u0432\u00a0\u0435\u0433\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438\u00a0\u2014 \u044d\u0442\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u00abbrain\u00bb). \u042d\u0442\u043e\u00a0\u2014 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u00ab\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e\u00bb 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430: \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d \u0434\u043e 8\u00a0\u0431\u0438\u0442, \u0432\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 <code>bfloat16<\/code>, \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u0438\u043c\u00a0\u0436\u0435, \u043a\u0430\u043a\u00a0\u0443\u00a0<code>float32<\/code>. \u041d\u043e\u00a0\u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u044b\u00a0\u0431\u044b\u043b \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d \u0434\u043e 7\u00a0\u0431\u0438\u0442:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 16-\u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 bfloat16 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Bfloat16_floating-point_format\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0434\u0451\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b10000000, 0b1001001, exp_len=8, mant_len=7)  #> 3.140625<\/code><\/pre>\n<p>\u041a\u0430\u043a\u00a0\u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e\u00a0\u2014 \u0438\u0437\u2011\u0437\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0444\u043e\u0440\u043c\u0430\u0442 <code>bfloat16<\/code> \u0432\u043c\u0435\u0449\u0430\u0435\u0442 \u0432\u00a0\u0441\u0435\u0431\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0447\u0435\u043c <code>float16<\/code>:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b11111110, 0b1111111, exp_len=8, mant_len=7)  #> 3.3895313892515355e+38<\/code><\/pre>\n<p>\u042d\u0442\u043e\u00a0\u2014 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043b\u0443\u0447\u0448\u0435 \u0432\u00a0\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 <code>65504.0<\/code> \u0438\u0437\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043d\u043e, \u043a\u0430\u043a\u00a0\u0443\u0436\u0435\u00a0\u0431\u044b\u043b\u043e \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0447\u0438\u0441\u0435\u043b <code>bfloat16<\/code> \u043d\u0438\u0436\u0435 \u0438\u0437\u2011\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u00a0\u043d\u0430\u00a0\u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0438\u0442. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u0442\u0438\u043f\u0430 \u0432\u00a0TensorFlow:<\/p>\n<pre><code class=\"python\">import tensorflow as tf  print(f\"{tf.constant(1.2, dtype=tf.float16).numpy().item():.12f}\")  # > 1.200195312500  print(f\"{tf.constant(1.2, dtype=tf.bfloat16).numpy().item():.12f}\")  # > 1.203125000000<\/code><\/pre>\n<h2>8-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (FP8)<\/h2>\n<p>\u042d\u0442\u043e\u0442 (\u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u044b\u0439) \u0444\u043e\u0440\u043c\u0430\u0442\u00a0\u0431\u044b\u043b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d \u0432 2022\u00a0\u0433\u043e\u0434\u0443 \u0438, \u043a\u0430\u043a\u00a0\u043c\u043e\u0436\u0435\u0442 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c, \u043e\u043d \u0442\u043e\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d \u0434\u043b\u044f\u00a0\u0446\u0435\u043b\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u041c\u043e\u0434\u0435\u043b\u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438\u0445 \u0432\u0441\u0451 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0443\u043c\u0435\u0449\u0430\u0442\u044c \u0432\u00a0\u043f\u0430\u043c\u044f\u0442\u0438 GPU. \u0424\u043e\u0440\u043c\u0430\u0442 FP8\u00a0\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u00a0\u0434\u0432\u0443\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445: E4M3\u00a0(4-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 3-\u0431\u0438\u0442\u043d\u0430\u044f \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0430) \u0438 E5M2\u00a0(5-\u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 2-\u0431\u0438\u0442\u043d\u0430\u044f \u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0430):<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 8-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Minifloat\">\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a<\/a>)<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u044b\u044f\u0441\u043d\u0438\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 FP8:<\/p>\n<pre><code class=\"python\">ieee_754_conversion(0, 0b1111, 0b110, exp_len=4, mant_len=3)  # > 448.0  ieee_754_conversion(0, 0b11110, 0b11, exp_len=5, mant_len=2)  # > 57344.0<\/code><\/pre>\n<p>\u0424\u043e\u0440\u043c\u0430\u0442 FP8 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0432 TensorFlow:<\/p>\n<pre><code class=\"python\">import tensorflow as tf from tensorflow.python.framework import dtypes   a_fp8 = tf.constant(3.14, dtype=dtypes.float8_e4m3fn) print(a_fp8)  # > 3.25  a_fp8 = tf.constant(3.14, dtype=dtypes.float8_e5m2) print(a_fp8)  # > 3.0<\/code><\/pre>\n<p>\u041d\u0430\u0440\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u0438\u043d\u0443\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043e\u0431\u0430 \u0442\u0438\u043f\u0430:<\/p>\n<pre><code class=\"python\">import numpy as np import tensorflow as tf from tensorflow.python.framework import dtypes import matplotlib.pyplot as plt  length = np.pi * 4 resolution = 200 xvals = np.arange(0, length, length \/ resolution) wave = np.sin(xvals) wave_fp8_1 = tf.cast(wave, dtypes.float8_e4m3fn) wave_fp8_2 = tf.cast(wave, dtypes.float8_e5m2)  plt.rcParams[\"figure.figsize\"] = (14, 5) plt.plot(xvals, wave_fp8_1.numpy()) plt.plot(xvals, wave_fp8_2.numpy()) plt.show()<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0447\u0442\u043e \u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u043f\u043b\u043e\u0445:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u043e\u043b\u043d\u0430, \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 FP8 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0443\u0442 \u044f\u0441\u043d\u043e \u0432\u0438\u0434\u043d\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0442\u0435\u0440\u0438 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438, \u043d\u043e\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u043e\u0447\u0435\u043d\u044c \u0434\u0430\u0436\u0435 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430\u00a0\u0441\u0438\u043d\u0443\u0441\u043e\u0438\u0434\u0443!<\/p>\n<h2>4-\u0431\u0438\u0442\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (FP4, NF4)<\/h2>\n<p>\u0410\u00a0\u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a\u00a0\u0441\u0430\u043c\u043e\u0439 \u00ab\u0431\u0435\u0437\u0443\u043c\u043d\u043e\u0439\u00bb \u0442\u0435\u043c\u0435\u00a0\u2014 \u043a 4-\u0431\u0438\u0442\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (FP4). \u041d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0442\u0430\u043a\u0438\u0435 \u0447\u0438\u0441\u043b\u0430\u00a0\u2014 \u044d\u0442\u043e \u0441\u0430\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0443 IEEE, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 1\u00a0\u0431\u0438\u0442 \u043d\u0430\u00a0\u0437\u043d\u0430\u043a, 2\u00a0\u0431\u0438\u0442\u0430 \u043d\u0430\u00a0\u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 1\u00a0\u0431\u0438\u0442 \u043d\u0430\u00a0\u043c\u0430\u043d\u0442\u0438\u0441\u0441\u0443:<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f FP4 (\u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u043e\u043c)<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442\u0435 FP4, \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u043e. \u0412\u0441\u0435 \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430\u00a0\u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 16\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432!<\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f 4-\u0431\u0438\u0442\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441\u00a0\u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0442\u0438\u043f\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u043c NormalFloat (NF4). \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f NF4\u00a0\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f\u00a0\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f NF4\u00a0\u043b\u0435\u0433\u043a\u043e \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u00a0\u044d\u043a\u0440\u0430\u043d \u0432\u00a0\u0432\u0438\u0434\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 (\u043f\u0440\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439):<\/p>\n<pre><code class=\"python\">[-1.0, -0.6961928009986877, -0.5250730514526367, -0.39491748809814453,   -0.28444138169288635, -0.18477343022823334, -0.09105003625154495, 0.0,   0.07958029955625534, 0.16093020141124725, 0.24611230194568634, 0.33791524171829224,    0.44070982933044434, 0.5626170039176941, 0.7229568362236023, 1.0]<\/code><\/pre>\n<p>\u0418 \u0442\u0438\u043f FP4, \u0438 \u0442\u0438\u043f NF4\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u00a0Python\u2011\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 <a href=\"https:\/\/github.com\/TimDettmers\/bitsandbytes\">bitsandbytes<\/a>. \u0414\u0430\u0432\u0430\u0439\u0442\u0435, \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 <code>[1.0, 2.0, 3.0, 4.0]<\/code> \u0432\u00a0\u0444\u043e\u0440\u043c\u0430\u0442 FP4:<\/p>\n<pre><code class=\"python\">from bitsandbytes import functional as bf  def print_uint(val: int, n_digits=8) -> str:     \"\"\" Convert 42 => \ufffd' \"\"\"     return format(val, 'b').zfill(n_digits)  device = torch.device(\"cuda\") x = torch.tensor([1.0, 2.0, 3.0, 4.0], device=device) x_4bit, qstate = bf.quantize_fp4(x, blocksize=64)  print(x_4bit) # > tensor([[117], [35]], dtype=torch.uint8)  print_uint(x_4bit[0].item()) # > 01110101 print_uint(x_4bit[1].item()) # > 00100011  print(qstate) # > (tensor([4.]),  # >  'fp4',  # >  tensor([ 0.0000,  0.0052,  0.6667,  1.0000,  0.3333,  0.5000,  0.1667,  0.2500, # >           0.0000, -0.0052, -0.6667, -1.0000, -0.3333, -0.5000, -0.1667, -0.2500])])<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e. \u041d\u0430\u00a0\u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430: 16-\u0431\u0438\u0442\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <code>[117, 35]<\/code>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043d\u0430\u0448\u0438 4\u00a0\u0447\u0438\u0441\u043b\u0430, \u0438 \u043e\u0431\u044a\u0435\u043a\u0442 \u00ab\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u00bb, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-361233","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/361233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=361233"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/361233\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=361233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=361233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=361233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}