I am windows 10 user. Anaconda version torch-cpu 1.1.0
I installed MSVC v142 VS2019 C++ x64/x86 building tools (v14.23)
when I tried to pip install fairseq , I got the following errors:
Building wheel for fastBPE (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: 'C:\Users\zjplab\Miniconda3\envs\torch\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\zjplab\\AppData\\Local\\Temp\\pip-install-dr_9ni_0\\fastBPE\\setup.py'"'"'; __file__='"'"'C:\\Users\\zjplab\\AppData\\Local\\Temp\\pip-install-dr_9ni_0\\fastBPE\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d 'C:\Users\zjplab\AppData\Local\Temp\pip-wheel-2qy7fmwy' --python-tag cp37
cwd: C:\Users\zjplab\AppData\Local\Temp\pip-install-dr_9ni_0\fastBPE\
Complete output (19 lines):
running bdist_wheel
running build
running build_py
package init file 'fastBPE\__init__.py' not found (or not a regular file)
running build_ext
building 'fastBPE' extension
creating build
creating build\temp.win-amd64-3.7
creating build\temp.win-amd64-3.7\Release
creating build\temp.win-amd64-3.7\Release\fastBPE
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\Users\zjplab\Miniconda3\envs\torch\include -IC:\Users\zjplab\Miniconda3\envs\torch\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /EHsc /TpfastBPE/fastBPE.cpp /Fobuild\temp.win-amd64-3.7\Release\fastBPE/fastBPE.obj -std=c++11 -Ofast -pthread
cl : Command line warning D9025 : overriding '/Os' with '/Ot'
cl : Command line warning D9002 : ignoring unknown option '-std=c++11'
cl : Command line warning D9002 : ignoring unknown option '-Of'
cl : Command line warning D9002 : ignoring unknown option '-Oa'
cl : Command line warning D9002 : ignoring unknown option '-pthread'
fastBPE.cpp
C:\Users\zjplab\AppData\Local\Temp\pip-install-dr_9ni_0\fastBPE\fastBPE\fastBPE.hpp(15): fatal error C1083: Cannot open include file: 'sys/mman.h': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.23.28105\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
----------------------------------------
ERROR: Failed building wheel for fastBPE
Running setup.py clean for fastBPE
Failed to build fastBPE
Installing collected packages: regex, tqdm, pywin32, pypiwin32, portalocker, typing, sacrebleu, fastBPE, fairseq
Running setup.py install for fastBPE ... error
ERROR: Command errored out with exit status 1:
command: 'C:\Users\zjplab\Miniconda3\envs\torch\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\zjplab\\AppData\\Local\\Temp\\pip-install-dr_9ni_0\\fastBPE\\setup.py'"'"'; __file__='"'"'C:\\Users\\zjplab\\AppData\\Local\\Temp\\pip-install-dr_9ni_0\\fastBPE\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\zjplab\AppData\Local\Temp\pip-record-uq6no_ej\install-record.txt' --single-version-externally-managed --compile
cwd: C:\Users\zjplab\AppData\Local\Temp\pip-install-dr_9ni_0\fastBPE\
Complete output (19 lines):
running install
running build
running build_py
package init file 'fastBPE\__init__.py' not found (or not a regular file)
running build_ext
building 'fastBPE' extension
creating build
creating build\temp.win-amd64-3.7
creating build\temp.win-amd64-3.7\Release
creating build\temp.win-amd64-3.7\Release\fastBPE
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\bin\HostX86\x64\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MT -IC:\Users\zjplab\Miniconda3\envs\torch\include -IC:\Users\zjplab\Miniconda3\envs\torch\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.23.28105\include" "-IC:\Program Files (x86)\Windows Kits\NETFXSDK\4.8\include\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.18362.0\cppwinrt" /EHsc /TpfastBPE/fastBPE.cpp /Fobuild\temp.win-amd64-3.7\Release\fastBPE/fastBPE.obj -std=c++11 -Ofast -pthread
cl : Command line warning D9025 : overriding '/Os' with '/Ot'
cl : Command line warning D9002 : ignoring unknown option '-std=c++11'
cl : Command line warning D9002 : ignoring unknown option '-Of'
cl : Command line warning D9002 : ignoring unknown option '-Oa'
cl : Command line warning D9002 : ignoring unknown option '-pthread'
fastBPE.cpp
C:\Users\zjplab\AppData\Local\Temp\pip-install-dr_9ni_0\fastBPE\fastBPE\fastBPE.hpp(15): fatal error C1083: Cannot open include file: 'sys/mman.h': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Tools\\MSVC\\14.23.28105\\bin\\HostX86\\x64\\cl.exe' failed with exit status 2
----------------------------------------
ERROR: Command errored out with exit status 1: 'C:\Users\zjplab\Miniconda3\envs\torch\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\zjplab\\AppData\\Local\\Temp\\pip-install-dr_9ni_0\\fastBPE\\setup.py'"'"'; __file__='"'"'C:\\Users\\zjplab\\AppData\\Local\\Temp\\pip-install-dr_9ni_0\\fastBPE\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\zjplab\AppData\Local\Temp\pip-record-uq6no_ej\install-record.txt' --single-version-externally-managed --compile Check the logs for full command output.
Ok. I have solved this problem myself. This error arises when you try to compile fastBPE( a dependency of fairseq) in windows. In order to solve this, you have to make modifications on:
distutils 's cygwinccompiler.pyFirst, git clone fastBPE source code to your local directory. Change line 15:
#include <mman.c>
to
#include "mman.c"
Add mman.h to fastBPE/fastBPE directory:
/*
* sys/mman.h
* mman-win32
*/
#ifndef _SYS_MMAN_H_
#define _SYS_MMAN_H_
#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
#endif
/* All the headers include this file. */
#ifndef _MSC_VER
#include <_mingw.h>
#endif
#include <sys/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define PROT_NONE 0
#define PROT_READ 1
#define PROT_WRITE 2
#define PROT_EXEC 4
#define MAP_FILE 0
#define MAP_SHARED 1
#define MAP_PRIVATE 2
#define MAP_TYPE 0xf
#define MAP_FIXED 0x10
#define MAP_ANONYMOUS 0x20
#define MAP_ANON MAP_ANONYMOUS
#define MAP_FAILED ((void *)-1)
/* Flags for msync. */
#define MS_ASYNC 1
#define MS_SYNC 2
#define MS_INVALIDATE 4
void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off);
int munmap(void *addr, size_t len);
int mprotect(void *addr, size_t len, int prot);
int msync(void *addr, size_t len, int flags);
int mlock(const void *addr, size_t len);
int munlock(const void *addr, size_t len);
#ifdef __cplusplus
};
#endif
#endif /* _SYS_MMAN_H_ */
and also mman.c
#include <windows.h>
#include <errno.h>
#include <io.h>
#include "mman.h"
#ifndef FILE_MAP_EXECUTE
#define FILE_MAP_EXECUTE 0x0020
#endif /* FILE_MAP_EXECUTE */
static int __map_mman_error(const DWORD err, const int deferr)
{
if (err == 0)
return 0;
//TODO: implement
return err;
}
static DWORD __map_mmap_prot_page(const int prot)
{
DWORD protect = 0;
if (prot == PROT_NONE)
return protect;
if ((prot & PROT_EXEC) != 0)
{
protect = ((prot & PROT_WRITE) != 0) ?
PAGE_EXECUTE_READWRITE : PAGE_EXECUTE_READ;
}
else
{
protect = ((prot & PROT_WRITE) != 0) ?
PAGE_READWRITE : PAGE_READONLY;
}
return protect;
}
static DWORD __map_mmap_prot_file(const int prot)
{
DWORD desiredAccess = 0;
if (prot == PROT_NONE)
return desiredAccess;
if ((prot & PROT_READ) != 0)
desiredAccess |= FILE_MAP_READ;
if ((prot & PROT_WRITE) != 0)
desiredAccess |= FILE_MAP_WRITE;
if ((prot & PROT_EXEC) != 0)
desiredAccess |= FILE_MAP_EXECUTE;
return desiredAccess;
}
void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t off)
{
HANDLE fm, h;
void * map = MAP_FAILED;
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4293)
#endif
const DWORD dwFileOffsetLow = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)off : (DWORD)(off & 0xFFFFFFFFL);
const DWORD dwFileOffsetHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)0 : (DWORD)((off >> 32) & 0xFFFFFFFFL);
const DWORD protect = __map_mmap_prot_page(prot);
const DWORD desiredAccess = __map_mmap_prot_file(prot);
const off_t maxSize = off + (off_t)len;
const DWORD dwMaxSizeLow = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)maxSize : (DWORD)(maxSize & 0xFFFFFFFFL);
const DWORD dwMaxSizeHigh = (sizeof(off_t) <= sizeof(DWORD)) ?
(DWORD)0 : (DWORD)((maxSize >> 32) & 0xFFFFFFFFL);
#ifdef _MSC_VER
#pragma warning(pop)
#endif
errno = 0;
if (len == 0
/* Unsupported flag combinations */
|| (flags & MAP_FIXED) != 0
/* Usupported protection combinations */
|| prot == PROT_EXEC)
{
errno = EINVAL;
return MAP_FAILED;
}
h = ((flags & MAP_ANONYMOUS) == 0) ?
(HANDLE)_get_osfhandle(fildes) : INVALID_HANDLE_VALUE;
if ((flags & MAP_ANONYMOUS) == 0 && h == INVALID_HANDLE_VALUE)
{
errno = EBADF;
return MAP_FAILED;
}
fm = CreateFileMapping(h, NULL, protect, dwMaxSizeHigh, dwMaxSizeLow, NULL);
if (fm == NULL)
{
errno = __map_mman_error(GetLastError(), EPERM);
return MAP_FAILED;
}
map = MapViewOfFile(fm, desiredAccess, dwFileOffsetHigh, dwFileOffsetLow, len);
CloseHandle(fm);
if (map == NULL)
{
errno = __map_mman_error(GetLastError(), EPERM);
return MAP_FAILED;
}
return map;
}
int munmap(void *addr, size_t len)
{
if (UnmapViewOfFile(addr))
return 0;
errno = __map_mman_error(GetLastError(), EPERM);
return -1;
}
int mprotect(void *addr, size_t len, int prot)
{
DWORD newProtect = __map_mmap_prot_page(prot);
DWORD oldProtect = 0;
if (VirtualProtect(addr, len, newProtect, &oldProtect))
return 0;
errno = __map_mman_error(GetLastError(), EPERM);
return -1;
}
int msync(void *addr, size_t len, int flags)
{
if (FlushViewOfFile(addr, len))
return 0;
errno = __map_mman_error(GetLastError(), EPERM);
return -1;
}
int mlock(const void *addr, size_t len)
{
if (VirtualLock((LPVOID)addr, len))
return 0;
errno = __map_mman_error(GetLastError(), EPERM);
return -1;
}
int munlock(const void *addr, size_t len)
{
if (VirtualUnlock((LPVOID)addr, len))
return 0;
errno = __map_mman_error(GetLastError(), EPERM);
return -1;
}
Reason : Under any windows C++ compiler, we don't have mman.h . But I have found the following windows alternative lib.
Second:
Build modified fastBPE using:
python setup.py build --compiler=mingw32
And then install it:
bash.
python setup.py install
Third, two errors will occur in the last step. The fix to the following issue is similar to this page.
We modify cygwinccompiler.py under distutils:
In around line 85 we change to:
### PATCH###############################
# INCLUDES NEWEST mscvcr VERSION
#########################################
elif msc_ver >= '1900':
# Visual Studio 2015 / Visual C++ 14.0
# "msvcr140.dll no longer exists" http://blogs.msdn.com/b/vcblog/archive/2014/06/03/visual-studio-14-ctp.aspx
return ['vcruntime140']
else:
raise ValueError("Unknown MS Compiler version %s " % msc_ver)
Notice, my compiler version is 1915( to chekc your version, msc_pos = sys.version.find('MSC v.') and then msc_ver = sys.version[msc_pos+6:msc_pos+10] ). After testing, vcruntime140 still works for this 1915 versioned compiler.
And then you need to copy a vcruntime140.dll to your gcc lib. Identical to this page link.
After this step, you should be able to compile successfully albeit with some warnings.

And then you can install fastBPE:

and then
pip install fairseq
These solutions did not work for me sadly. At the end of the third stage when I run
python setup.py install,
throws another error
d:\development\fastbpe\fastbpe\fastBPE.hpp(18): fatal error C1083: Cannot open include file: 'unistd.h': No such file or directory
error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\VC\\BIN\\x86_amd64\\cl.exe' failed with exit status 2
@aliyesilkanat Possible fix for you:
https://stackoverflow.com/questions/2793413/unistd-h-related-difficulty-when-compiling-bison-flex-program-under-vc/2872995#2872995
@aliyesilkanat Looks like you are stuck at the fastBPE. Did you use that
python setup.py build --compiler=mingw32 command?
@aliyesilkanat I tried a few days, finally, I got it. This tutorial provided by @zjplab is TOTALLY ESSENTIAL to anyone persists in Windows 10 python environment
where is "#include
I cannot locate the mman.c line as well
where is "#include
" ?
@HoiBunCa
Copy and paste to create one in your local folder
@zjplab i followed your instructions
1.Downloaded fastBPE repo
2.added "if msc_ver >= '1900': return ['vcruntime140']" in distutilscygwinccompiler.py
Im getting this error 'thread' was not declared in this scope 28 | const size_t kThreads = max(1, min(10, int(thread::hardware_concurrency())))
Full stack trace: Tired to debug and search for this issue in other portals but was not able to get any solutions could you please assist
python setup.py build --compiler=mingw32
running build
running build_py
running build_ext
building 'fastBPE' extension
C:\MinGW\bin\gcc.exe -mdll -O -Wall -IfastBPE -IC:\Users\aa\AppData\Local\Programs\Python\Python37\include -IC:\Users\aa\AppData\Local\Programs\Python\Python37\include -c fastBPE/fastBPE.cpp -o build\temp.win-amd64-3.7\Release\fastbpe\fastbpe.o -std=c++11 -Ofast -pthread
In file included from fastBPE/fastBPE.cpp:653:
fastBPE/fastBPE.hpp:28:44: error: 'thread' was not declared in this scope
28 | const size_t kThreads = max(1, min(10, int(thread::hardware_concurrency())));
| ^~~~~~
fastBPE/fastBPE.hpp:20:1: note: 'std::thread' is defined in header '<thread>'; did you forget to '#include <thread>'?
19 | #include <unordered_set>
+++ |+#include <thread>
20 | #include <vector>
fastBPE/fastBPE.hpp: In function 'void fastBPE::readText(const char*, std::unordered_map<std::__cxx11::basic_string<char>, unsigned int>&)':
fastBPE/fastBPE.hpp:83:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=]
83 | fprintf(stderr, "Read %lu words (%lu unique) from text file.\n", total,
| ~~^ ~~~~~
| | |
| long unsigned int uint64_t {aka long long unsigned int}
| %I64u
fastBPE/fastBPE.hpp:83:38: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'std::unordered_map<std::__cxx11::basic_string<char>, unsigned int>::size_type' {aka 'unsigned int'} [-Wformat=]
83 | fprintf(stderr, "Read %lu words (%lu unique) from text file.\n", total,
| ~~^
| |
| long unsigned int
| %u
84 | word_count.size());
| ~~~~~~~~~~~~~~~~~
| |
| std::unordered_map<std::__cxx11::basic_string<char>, unsigned int>::size_type {aka unsigned int}
fastBPE/fastBPE.hpp: In function 'void fastBPE::outputText(const char*, const char*, std::unordered_map<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >&)':
fastBPE/fastBPE.hpp:136:7: error: 'ftruncate' was not declared in this scope; did you mean 'strncat'?
136 | if (ftruncate(fdOut, out_size) < 0) {
| ^~~~~~~~~
| strncat
fastBPE/fastBPE.hpp:137:65: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'size_t' {aka 'unsigned int'} [-Wformat=]
137 | fprintf(stderr, "Couldn't truncate output file %s to size %lu\n", fpo,
| ~~^
| |
| long unsigned int
| %u
138 | out_size);
| ~~~~~~~~
| |
| size_t {aka unsigned int}
fastBPE/fastBPE.hpp:149:31: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'long long unsigned int' [-Wformat=]
149 | fprintf(stderr, "Modified %lu words from text file.\n", p.second);
| ~~^ ~~~~~~~~
| | |
| long unsigned int long long unsigned int
| %I64u
fastBPE/fastBPE.hpp: In function 'void fastBPE::readVocab(const char*, std::unordered_map<std::__cxx11::basic_string<char>, unsigned int>&)':
fastBPE/fastBPE.hpp:438:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'uint64_t' {aka 'long long unsigned int'} [-Wformat=]
438 | fprintf(stderr, "Read %lu words (%lu unique) from vocabulary file.\n", total,
| ~~^ ~~~~~
| | |
| long unsigned int uint64_t {aka long long unsigned int}
| %I64u
fastBPE/fastBPE.hpp:438:38: warning: format '%lu' expects argument of type 'long unsigned int', but argument 4 has type 'std::unordered_map<std::__cxx11::basic_string<char>, unsigned int>::size_type' {aka 'unsigned int'} [-Wformat=]
438 | fprintf(stderr, "Read %lu words (%lu unique) from vocabulary file.\n", total,
| ~~^
| |
| long unsigned int
| %u
439 | vocab.size());
| ~~~~~~~~~~~~
| |
| std::unordered_map<std::__cxx11::basic_string<char>, unsigned int>::size_type {aka unsigned int}
fastBPE/fastBPE.hpp: In function 'void fastBPE::readCodes(const char*, std::unordered_map<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, unsigned int, fastBPE::pair_hash>&, std::unordered_map<std::__cxx11::basic_string<char>, std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> > >&)':
fastBPE/fastBPE.hpp:462:27: warning: format '%lu' expects argument of type 'long unsigned int', but argument 3 has type 'std::unordered_map<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, unsigned int, fastBPE::pair_hash>::size_type' {aka 'unsigned int'} [-Wformat=]
462 | fprintf(stderr, "Read %lu codes from the codes file.\n", codes.size());
| ~~^ ~~~~~~~~~~~~
| | |
| long unsigned int std::unordered_map<std::pair<std::__cxx11::basic_string<char>, std::__cxx11::basic_string<char> >, unsigned int, fastBPE::pair_hash>::size_type {aka unsigned int}
| %u
fastBPE/fastBPE.hpp: In function 'void fastBPE::applybpe(const char*, const char*, const char*, const char*)':
fastBPE/fastBPE.hpp:607:37: error: size of array 'bpe' is not an integral constant-expression
607 | unordered_map<string, string> bpe[kThreads];
| ^~~~~~~~
fastBPE/fastBPE.hpp:608:10: error: 'thread' was not declared in this scope
608 | vector<thread> threads;
| ^~~~~~
fastBPE/fastBPE.hpp:608:10: note: 'std::thread' is defined in header '<thread>'; did you forget to '#include <thread>'?
fastBPE/fastBPE.hpp:608:16: error: template argument 1 is invalid
608 | vector<thread> threads;
| ^
fastBPE/fastBPE.hpp:608:16: error: template argument 2 is invalid
fastBPE/fastBPE.hpp:610:13: error: request for member 'emplace_back' in 'threads', which is of non-class type 'int'
610 | threads.emplace_back(
| ^~~~~~~~~~~~
fastBPE/fastBPE.hpp:623:14: error: invalid types 'int[size_t {aka unsigned int}]' for array subscript
623 | threads[i].join();
| ^
error: command 'C:\\MinGW\\bin\\gcc.exe' failed with exit status 1
Just adding comments of own experiences to help others with this. For reference I'm trying to get fastBPE for use for the salesforce CTRL model here: https://github.com/salesforce/ctrl
Problem 1:
Problem 2:
Problem 3:
UPDATE:
UPDATE 2:
Most helpful comment
where is "#include" ?